К другим статьям
1С-БитриксКаталогУмный фильтрПроизводительностьSQL
Для бизнеса

Умный фильтр тормозит на 1С-Битрикс: что проверять

Умный фильтр тормозит на 1С-Битрикс: что проверять

Умный фильтр на 1С-Битрикс тормозит, когда тяжело не «открытие раздела», а пересчёт фасетов: свойства в фильтре, индекс, SQL на URL с параметрами. Сначала сравнивают время раздела без фильтра и с двумя-тремя условиями. Если без фильтра быстро, а с фильтром нет — это отдельная задача, её не лечат общим включением композита.

Общий порядок замеров каталога — в статье «Тормозит каталог». Здесь только фильтр.

Чем умный фильтр отличается от списка товаров

Список раздела отдаёт порцию карточек. Умный фильтр дополнительно считает, какие значения свойств ещё доступны и сколько товаров останется после каждого клика. На большом каталоге эта вторая работа может быть дороже вывода самих товаров.

Поэтому симптом «раздел открывается пять секунд, а после выбора бренда — пятнадцать» информативнее, чем «каталог тормозит». Зафиксируйте контрольные URL: раздел без параметров, тот же раздел с одним свойством, с двумя, с сортировкой. Записывайте TTFB документа, а не только «ощущение в браузере».

Что почти всегда оказывается в профиле

  1. Слишком много свойств в фильтре. Каждое свойство, которое «пусть будет, вдруг пригодится», участвует в расчёте. Цвет, размер и бренд — одно. Десятки редких характеристик для узкого раздела — другое. Сначала сокращают набор на витрине, потом оптимизируют запросы.
  2. Фасетный индекс не готов или постоянно перестраивается. Пока индекс неполный, фильтр может ходить в тяжёлые выборки по свойствам. Пока он пересчитывается вместе с импортом, пользовательский хит попадает в ту же очередь, что и фон.
  3. Запросы в цикле и сортировки без опоры на индекс. Компонент фильтра и шаблон могут отдельно дергать наличие, цены и количество. На URL с параметрами это умножается.
  4. Фильтр по полям, которые плохо селективны. Свойство «да/нет» на всём каталоге или строка, по которой нет нормального индекса, даёт полный перебор.

Добавлять «ещё один индекс в MySQL» до EXPLAIN конкретного запроса опасно: запись при обмене подорожает, а фильтр может не ускориться.

Как отличить фильтр от остального каталога

Сравните четыре сценария в одно и то же время суток, с одинаковым состоянием кеша:

  • раздел без фильтра;
  • тот же раздел с фильтром;
  • карточка товара;
  • поиск по каталогу.

Если медленные все четыре — начинайте с общей диагностики каталога, а не с настройки умного фильтра. Если медленный только фильтр — не разгоняйте карточку и не отключайте кеш всего сайта.

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

Фасетный индекс: на что смотреть заказчику

Не обязательно читать код, чтобы задать правильные вопросы исполнителю.

  • Запущен ли пересчёт фасетов по расписанию и сколько он длится на полном каталоге.
  • Не стартует ли полный пересчёт на пользовательском хите.
  • Не совпадает ли окно пересчёта с обменом 1С и переиндексацией поиска.
  • После смены свойства товар появляется в фильтре сразу, через минуты или после ручного пересчёта.

Если индекс «вечно в процессе» на каталоге в сотни тысяч SKU, проблема уже не в галочке «включить умный фильтр», а в нагрузке индексации на большом каталоге. На Geometria как раз пересекались SQL, кеш и фоновые пересчёты на 800 000 SKU.

Свойства: что оставить в фильтре

Для витрины обычно хватает свойств, по которым покупатель реально сужает выбор: бренд, ключевые характеристики, наличие, цена. Внутренние служебные свойства, выгрузки и «на всякий случай» в публичный фильтр не ставят.

Проверьте:

  • свойство в умном фильтре включено в инфоблоке, но не нужно на витрине;
  • одно и то же по смыслу свойство дублируется (цвет как список и как строка);
  • фильтр строится по торговым предложениям, а считает родителя, или наоборот;
  • диапазон цены считается по всем SKU раздела без ограничения.

Сужение набора свойств часто даёт больший выигрыш, чем смена хостинга.

Безопасный порядок правок

  1. Замерить контрольные URL без изменений.
  2. Снять профиль SQL и времени компонента на URL с фильтром.
  3. Убрать с витрины свойства, которые не участвуют в выборе покупки.
  4. Проверить, что фасетный индекс догоняет каталог в фоне, а не на хите.
  5. Только затем менять запросы, пакетную загрузку и индексы БД.
  6. Повторить те же URL. Проверить, что фильтр по-прежнему показывает верные количества и не «теряет» товары.

Не включайте композит как единственное лечение фильтра: динамическая область с фасетами всё равно посчитается. Не очищайте кеш всего каталога после каждого изменения свойства — это ускорит тест и убьёт прод в час обмена.

Что передать разработчику

Нужны медленные URL с параметрами фильтра, время суток, HAR или скрин Network с TTFB, список свойств в фильтре раздела и расписание обмена и переиндексации. Без этого разбор начинается с догадок.

Формат работы с такими задачами — на странице ускорения каталога. Если параллельно «плывут» цены и остатки, это уже обмен с 1С, а не умный фильтр.

Итог

Медленный умный фильтр — отдельный сценарий: фасеты, набор свойств и SQL на параметрах URL. Его диагностируют сравнением раздела с фильтром и без, а ускоряют сокращением работы, а не общей «оптимизацией Битрикс». Когда фильтр быстрый, а раздел всё равно тяжёлый, возвращайтесь к профилю всего каталога.

Читайте также

Материалы по теме

Похожая задача?

Разберём вашу ситуацию с 1С-Битрикс

Опишите, что сейчас не работает или что нужно сделать — отвечу с планом и ориентиром по срокам.