Кеширование и композитный режим в 1С-Битрикс: как настроить и не потерять скорость сайта

После включения композита сайт стал быстрее, но покупатель увидел чужую корзину или старую цену. Тут проблема не в самой идее кеша: в статическую часть попали данные, которые меняются для каждого пользователя.

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

Схема кеширования и композитного режима в 1С-Битрикс: страница, кеш, композит и проверка

Кеширование ускоряет сайт, когда повторно использует уже рассчитанный результат. Композитный режим решает более узкую задачу: сохраняет статическую часть готовой HTML-страницы и отдельно загружает динамические области. Эти механизмы дополняют друг друга, но не заменяют диагностику медленного PHP-кода, SQL или внешнего сервиса.

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

Какие виды кеша есть в Bitrix Framework

Три слоя кеша: Данные → Компонент → HTML-страница
Три слоя кеша: Данные, Компонент, HTML-страница.

Кеш компонентов

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

Управляемый кеш

Управляемый кеш связывает запись с изменением данных. Официальная документация Bitrix Framework уточняет: автоматический сброс работает в тех сценариях, где система знает связь кеша с таблицей. Если разработчик создал запись без такой связи, её приходится очищать явно или ждать окончания TTL [1].

Кеш данных приложения

Разработчик может кешировать результат сложного расчёта или обращения к API. Здесь он сам отвечает за состав ключа, срок жизни и инвалидирование. Ошибка в одном из трёх элементов способна смешать данные пользователей или надолго оставить устаревший результат.

Композитный сайт

Композит делит страницу на статичную и динамическую части. При повторном посещении готовая статичная часть отдаётся из кеша, а динамические области обновляются отдельно [1]. Это хорошо подходит для публичных страниц каталога и контента, но требует особого внимания к персонализированным блокам.

Что кешировать, а что оставить динамическим

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

Что оставить динамическим: Цена и остаток → Корзина → Личный кабинет
Что оставить динамическим: Цена и остаток, Корзина, Личный кабинет.

Документация 1С-Битрикс прямо рекомендует не кешировать композитом поиск, корзину и оформление заказа [2]. На практике к зоне повышенного внимания также относятся:

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

Это не означает, что всю страницу нужно исключить. Часто достаточно правильно выделить динамический фрагмент и проверить его для всех значимых состояний.

Как выбрать режим композита

Автокомпозит быстрее включить на типовом проекте, но его результат всё равно проверяют на реальных компонентах и пользовательских сценариях. Ручная адаптация требуется, когда шаблон сильно изменён, компоненты используют нестандартный JavaScript или персональные данные встроены в общий HTML.

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

Порядок безопасной настройки

Безопасное включение: Замерить до → Тестовая копия → Сравнить после
Безопасное включение: Замерить до, Тестовая копия, Сравнить после.

1. Снять исходные показатели

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

2. Проверить обычное кеширование компонентов

Композит не исправит компонент, который на каждом динамическом запросе делает десятки одинаковых выборок. Сначала проверяют режимы кеширования, параметры ключа и причины частых сбросов. Монитор производительности 1С-Битрикс умеет вести журнал кеширования и SQL на ограниченный период [3].

3. Включить композит на тестовой копии

Настройки выполняют через административный раздел. Файл /bitrix/html_pages/.config.php вручную не редактируют: документация предупреждает, что интерфейс перезапишет такие изменения [2]. Если статические страницы должен напрямую отдавать NGINX, используют конфигурацию, соответствующую текущему окружению и версии Битрикс [4].

4. Настроить исключения и группы

Композит применяется только к выбранным группам. Пользователь, состоящий одновременно в нескольких группах, должен соответствовать правилам целиком. Администраторы с панелью управления не должны попадать в кешируемую группу: кеширование административной панели указывает на неверную настройку [2].

5. Проверить динамические зоны

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

Файлы, Redis и Memcached: как выбрать хранилище

Bitrix Framework поддерживает файловый кеш и хранилища в оперативной памяти, включая Redis и Memcache [1]. Переход в память не гарантирует ускорение сам по себе. Результат зависит от скорости диска, объёма кеша, сетевой задержки, числа процессов, частоты вытеснения записей и правильности идентификатора сайта.

Для нескольких сайтов важно разделять кеш через уникальный SID. При смене формата SID старый кеш очищают, иначе новая конфигурация его не использует [1]. Перед переключением хранилища проверяют доступность расширения PHP, лимит памяти, поведение при перезапуске и сценарий отказа сервиса кеша.

Частые ошибки

  • Кеш включён, но постоянно сбрасывается. Ищут частые обновления, агентов и компоненты, голосующие против композита.
  • На странице чужая цена или город. Персональный параметр не учтён в ключе либо блок ошибочно оставлен статичным.
  • Корзина обновляется только после перезагрузки. Неверно адаптирована динамическая область или её JavaScript.
  • После публикации видна старая информация. Нет связи кеша с изменяемыми данными или некорректно работает сброс.
  • Прогретая главная быстрая, остальные страницы медленные. Проверялся один удачный URL, а не набор шаблонов и состояний.

Для отладки у композита есть отдельный журнал. Он показывает причины, по которым страница не создала кеш: запрет компонента, неверный домен, параметры URL, Ajax-запрос, административную панель и другие условия [2].

Как поймать старые данные: Сменить цену → Очистить нужный кеш → Проверить группы
Как поймать старые данные: Сменить цену, Очистить нужный кеш, Проверить группы.

Как принять результат

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

Скорость сравнивают на одинаковых URL и одинаковом состоянии кеша. Помимо времени ответа контролируют ошибки, свежесть данных и нагрузку при одновременных запросах. Только такой результат показывает, что кеш действительно помогает сайту, а не скрывает ошибку до следующего обновления каталога.

Источники

[1] Bitrix Framework — кеширование: docs.1c-bitrix.ru/pages/performance/caching.html

[2] Bitrix Framework — Композитный сайт: docs.1c-bitrix.ru/pages/performance/composite-site.html

[3] 1С-Битрикс — настройки Монитора производительности: dev.1c-bitrix.ru/user_help/settings/perfmon/settings.php

[4] 1С-Битрикс: Веб-окружение — настройка NGINX для композита: dev.1c-bitrix.ru/learning/course/?COURSE_ID=37&CHAPTER_ID=08863

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