Современные
IT-решения
г. Нижний Новгород
ул. Белинского, 38, офис 5
+7 (831) 212-94-04
Заказать звонок

Случалось ли вам пользоваться конструктором скидок в 1С-Битрикс? На наш взгляд — это одна из самых крутых фич данной системы, при должном понимании которой открывается широчайший функционал: хотите скидку на синие штаны определенного бренда при строгом соответствии с фазой луны? Пожалуйста!

Но как показала практика, функционал этого инструмента — слабое место. Из-за количества анализируемых сущностей, при большом количестве товаров в корзине (100+), и большом количестве скидок (30+), время рендера корзины, а так же сохранение заказа неприлично растет. И растет совсем неприлично (счет идет на минуты!) при дальнейшем увеличении корзины — а в нашем проекте могло быть и 700+ товаров в корзине. Если прибавить к этому онлайн в несколько сотен пользователей, одновременно работающих с корзиной…

Мы пошли сложным путем: решили дублировать данный функционал, разработав с ноля модуль для высокопроизводительного расчета скидок. А раз так — то и корзину решили ускорить!

Итого, наша кастомная корзина держит на стандартном тарифе firstvds более 25 000 уников в сутки, с высоким одновременным онлайном, работает в каталоге с нескольким десятком тысяч позиций, и все операции делает мгновенно! Как это получилось?

Для расчета скидок мы ограничившись полутора десятками анализируемых параметров:

  • Период действия
  • Сумма корзины
  • Количество артикулов в корзине
  • Количество позиций в корзине
  • Способ оплаты
  • Исключение совместимости с другими скидками
  • Покупка конкретного товара
  • Категория + фильтрация товара по ней
  • Первый заказ

Результат применяемой скидки тоже ограничен:

  • Скидка в % + на выбранные товары/категории
  • Скидка в рублях
  • Бесплатная доставка
  • Удвоить выбранный товар (1+1)
  • Цикличный подарок (при покупке каждых N штук в подарок +N штук)
  • Скидка по свойству товара

А для еще большего ускорения — пересчет корзины и скидок происходит только в двух случаях:

  • Корректировка корзины (добавление или удаление товара, изменение кол-ва)
  • Оформление заказа

Слишком сложно? На первый взгляд да.

Но решение полностью оправдало себя: оно работает в проекте уже третий год, имеет огромный запас по нагрузке, а благодаря к подходу в построении кода — уже несколько раз успешно модернизировалось — добавляли новые параметры к анализу, и новые результаты применения.

Столкнулись с похожей проблемой? Будем рады поделиться своим опытом!