@ArrayPop

Как сделать быструю сортировку и фильтрацию товаров в bitrix с учетом скидок которые указаны в правилах корзины?

В bitrix проекте в карточке товара с торговыми предложениями выводится цена с учетом скидки. Когда 100 торговых предложений это работает быстро, но когда их больше 1000 то страница может грузиться 3 секунды и больше. Все дело в том что мы из базы получаем все 1000 товаров, из за этого страница медленно грузится. Казалось бы тревиальная задача, можно просто при загрузке страницы выводить одно торговое предложение, потом клиент нажимая на select или checkbox выбирает нужное торговое предложение которое подтягивается c помощью ajax. Но допустим нам нужно вывести товар с самой маленькой стоимостью с учетом скидки, к сожалению правила корзины в bitrix устроены так, что для получения товара с маеньшей ценой надо прогнать в цикле все 1000 товаров и определить какая получается скидка у каждого товара, а это не избежно приведет к медленной загрузке странице. Было несколько идей как такое реализовать:
1) Сделать индексацию скидок например через сервис очередей, запускать задачу которая проганяет все товары по скидкам и получает меньшую цену. Недостаток тут в том, что это бы плохо работало для скидок которые рассчитаны на конкретного пользователя, получается нам бы пришлось еще прогонять все товары для всех пользователей, что бы узнать скидку. Или прогонять все товары по скидкам для конкретного пользователя, что опять же замедлит запрос если делать на лету или же клиент будет ждать пока сервис очередей высчитает скидку.
2) Сделать супер огромный sql запрос который бы фильтровал товары такому же алгоритму как это делают правила корзины в bitrix. Тут проблема в том что не хотелось бы вдаваться в детали реализации правил корзины, как минимум это приведет к дублированию логики, так как в bitrix скидки считаются на php, нам бы пришлось это еще на sql делать. Плюс нет гарантии что получиться без ошибок сделать копию логики на sql запросе. Скорее всего будут баги и много не учтенных сценариев.
3) Сделать свою логику скидок, и подстроить под себя для удобства. Тут минус в том что bitrix предлагает и так уже впринципе не плохой инструмент для работы со скидками, делая свои скидки мы не гарантируем их гибкость такую же как в битриксе или же сделав по аналогии со скидками битрикс, также получится огромный sql запрос, со сложной логикой.
Может у кого то была такая задача, как вы ее решали? Как вообще грамотно сделать быструю фильтрацию с учетом скидок, логика которых может быть написана на php к примеру?
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 1
@eres_time
никак
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы