Медленный каталог на 1С-Битрикс: с чего начать диагностику

Медленный каталог на 1С-Битрикс редко тормозит “просто потому что Битрикс”. Обычно есть конкретная причина: тяжёлый умный фильтр, слишком много свойств, отключённый или неправильно настроенный кэш, торговые предложения, большие изображения, отсутствие индексов или кастомный код в result_modifier.php.

Оптимизацию лучше начинать с замеров. Если сразу менять параметры компонента наугад, можно ускорить одну страницу и сломать другую.

Понять, какая страница тормозит

Каталог состоит из разных страниц: список разделов, раздел с товарами, карточка, фильтр, поиск, AJAX-подгрузка. У каждой может быть своя причина.

  • главная страница каталога;
  • раздел без фильтра;
  • раздел с фильтром;
  • карточка товара;
  • страница с торговыми предложениями;
  • AJAX-запрос сортировки или пагинации.

Для начала нужно замерить время конкретного URL и сравнить с похожими страницами.

curl -o /dev/null -s -w "%{time_total}\n" https://example.ru/catalog/section/

Кэш компонента

В параметрах bitrix:catalog, bitrix:catalog.section и bitrix:catalog.smart.filter нужно проверить CACHE_TYPE и CACHE_TIME. Если кэш выключен на большом каталоге, сайт будет каждый раз собирать данные заново.

'CACHE_TYPE' => 'A',
'CACHE_TIME' => 36000000,
'CACHE_GROUPS' => 'Y',

CACHE_GROUPS влияет на кэширование с учётом групп пользователей. Если для гостей и авторизованных пользователей данные одинаковые, настройки можно пересмотреть, но только после проверки прав и цен.

Умный фильтр

Умный фильтр может быть самым тяжёлым местом каталога. Особенно если в фильтр выведены десятки свойств, у каждого свойства много значений, а каталог большой.

Что стоит проверить:

  • сколько свойств участвует в фильтре;
  • не попали ли туда служебные свойства;
  • нужен ли подсчёт количества товаров по каждому значению;
  • используется ли AJAX;
  • есть ли свойства с тысячами уникальных значений.

На практике фильтр лучше держать полезным для покупателя, а не выводить туда всё, что есть в инфоблоке.

Торговые предложения

SKU усложняют выборку. Если у товара много предложений, цен, остатков и свойств, компонент может собирать большой объём данных.

Проверьте, какие поля и свойства реально нужны в списке товаров. Не обязательно тянуть в раздел всё, что нужно только в карточке.

'OFFERS_FIELD_CODE' => ['ID', 'NAME'],
'OFFERS_PROPERTY_CODE' => ['COLOR', 'SIZE'],

Чем меньше лишних свойств в выборке, тем проще компоненту.

result_modifier.php и component_epilog.php

В шаблонах компонентов часто лежит кастомная логика. Там могут быть дополнительные запросы в цикле, загрузка картинок, расчёт остатков или обращение к внешнему API.

grep -R "CIBlockElement::GetList" -n local/templates
grep -R "foreach" -n local/templates/*/components

Если внутри цикла товаров выполняется отдельный запрос по каждому элементу, это типичная причина медленной страницы.

Изображения

Иногда каталог тормозит не на PHP, а в браузере. Список может отдавать оригинальные изображения вместо превью.

CFile::ResizeImageGet(
    $fileId,
    ['width' => 300, 'height' => 300],
    BX_RESIZE_IMAGE_PROPORTIONAL,
    true
);

Важно не генерировать изображения заново на каждом запросе. Результаты ресайза должны кэшироваться.

SQL и индексы

Если есть подозрение на базу, нужно смотреть медленные запросы. На сервере может быть включён slow query log. Также помогают инструменты мониторинга производительности Битрикс.

SHOW FULL PROCESSLIST;

Самостоятельно добавлять индексы в системные таблицы Битрикс нужно осторожно. Сначала нужно понять конкретный запрос и риск обновлений.

Чек-лист диагностики

  1. Замерить конкретный медленный URL.
  2. Проверить кэш компонента каталога и фильтра.
  3. Сократить лишние свойства в фильтре.
  4. Проверить SKU и состав выбираемых свойств.
  5. Проверить кастомный код в шаблоне компонента.
  6. Найти запросы внутри циклов товаров.
  7. Проверить размеры изображений.
  8. Посмотреть slow query log или processlist.

Медленный каталог почти всегда можно разложить на несколько конкретных причин. Главное — не выключать всё подряд, а проверить кэш, фильтр, шаблон, изображения и SQL по отдельности.

Комментарии (0)

Пока нет комментариев. Будьте первым!