Необходимость в оптимизации возникает уже после того, как количество активных пользователей переваливает за 100.
В стандартном варианте скидки (правила корзины) считаются динамически, при каждом обновлении страницы.
И при повышении числа пользователей b2b портала или корзины до 1000
Приводит к фактически полному зависанию работы корзины даже на самых мощных конфигурациях
При этом наличие задаваемых вручную скидок, а также мультивалютности еще более осложняет ситуацию со скоростью отображения страницы.
Поэтому было принято решение доработать механизм вывода, так как забирать каждый раз рассчитанную динамически был тоже невыгодно.
В итоге, механизм получения данных и последующего вывода выглядит следующим образом:
1. При выгрузке скидок из 1с для каждого пользователя рассчитываются все его цены из созданных для него правил, и складываются в отдельную таблицу (в текущем варианте в MySQL, работа с другими хранилищами - дело отдельного этапа).
Цены рассчитываются достаточно продолжительное время в сравнении с адекватным временем отображения страницы, поэтому это наиболее удачное место для осуществления данной операции.
2. В компоненте Каталога корзины осуществляется выборка этих данных в JS-переменную, а в JS-компоненте - вывод.
При этом данные выбираются один раз, а дальше кешируются.
Механизм кэширования может пересматриваться в дальнейшем, в зависимости от насущных потребностей в скорости отображения. В текущем варианте используется APC cache, поскольку это стандартный механизм, идущий вместе с самим PHP.
Для работы кэша необходимо поставить соответствующее расширение.
В CentOS 7, на которой построена BitrixVM, это команды:
yum install php-pecl-apcu.x86_64
yum install php-pecl-apcu-bc.x86_64
3. В дальнейшем при росте числа пользователей планируется осуществлять мониторинг и доработки в соответствии с полученными данными (отдельным этапом).