Стандартные компоненты Битрикса не справляются с количеством торговых предложений. Некоторые позиции в каталоге содержат тысячу характеристик, из-за чего фильтрация по свойствам занимает больше восьми минут.
Даже при правильно настроенной работе кеширования:
Оптимизировать выборку, заменив стандартные компоненты каталога, настроить кэширование.
Для каждого товара, который сайт показывает пользователю, Битрикс фильтрует информацию по тысячам торговых предложений. На одной только странице «Кроватей» выводится 24 тысячи торговых предложений. Выявили ряд неоправданно сложных запросов, увеличивающих нагрузку на сайт.
Сайт выполнял отдельный запрос на получение свойств каждого торгового предложения. Установили ограничение, чтобы пользователю первоначально отображалась минимальная стоимость товара. Количество запросов и время формирования страницы снизилось, в результате загрузка страницы стала в сотни раз быстрее.
При установленных в фильтре параметрах, раздел «Кровати» загружался восемь минут. Оперативная память сервера постепенно переполнялась, и в момент появления очередного запроса к базе данных, сервис mysql завершал работу с ошибкой. Проблема осложнялась из-за невозможности создать swap-файл на хостинге для временной выгрузки из памяти. Причиной долговременного выполнения запроса оказался подзапрос на получение родительских товаров по заданной фильтрации. Анализ возможных вариантов работы подзапроса показал, что его фильтрация никак не зависит от родительского запроса, но выполняется для каждого родительского элемента. Сделали этот подзапрос самостоятельным, и результат выполнения передали основному запросу в фильтр. Скорость вывода товаров на экран снизилась с восьми минут до двух сотых секунды.
На некоторых страницах сайта выводится список характеристик товаров. Использовали метод, который позволил получать данные напрямую из таблицы со значениями свойств. Функционал кэширования в mysql еще сильнее ускоряет работу. Таким образом, список характеристик товаров стал отображаться быстрее.
Изменение нескольких строк кода снизило нагрузку на сервер и увеличило производительность в сотни раз. Логика осталась прежней, но сайт стал работать без сбоев, а оперативная память больше не перегружается.
Проведите конкурс среди участников CMS Magazine
Узнайте цены и сроки уже завтра. Это бесплатно и займет ≈5 минут.