Кеширование в 1С-Битрикс: как ускорить сайт и не отдавать устаревшие данные

Кеширование — один из самых эффективных способов ускорить сайт на 1С-Битрикс, но именно кеш часто становится причиной странных ошибок: цена уже изменилась, а пользователь видит старую; товар отключили, а карточка ещё открывается; в админке всё правильно, но на публичной части данные обновляются только через несколько минут.
Проблема обычно не в самом кеше, а в отсутствии чёткой стратегии его сброса. Если просто увеличить время кеширования, сайт может стать быстрее, но менее предсказуемым. Если отключить кеш полностью, динамика будет актуальной, но нагрузка на PHP и базу резко вырастет.
Какие уровни кеша нужно различать
На типовом проекте одновременно могут работать несколько уровней:
- кеш компонентов Битрикс;
- managed cache и тегированный кеш;
- композитный режим;
- OPcache PHP;
- кеш браузера и CDN;
- собственные кеши в коде и интеграциях.
Когда разработчик говорит «очистил кеш», важно понимать, какой именно уровень был очищен. Иначе можно долго искать ошибку не там.
Кеш компонента должен зависеть от данных
Если компонент выводит каталог, новости или другой контент, его кеш должен сбрасываться при изменении соответствующих сущностей. Стандартные компоненты Битрикс обычно делают это через managed cache. В самописных решениях эту логику нередко забывают.
Опасный вариант — хранить результат часами и рассчитывать только на время жизни кеша. Тогда любое изменение на сайте имеет непредсказуемую задержку публикации.
Тегированный кеш удобен для точечного сброса
Вместо полной очистки можно связывать фрагменты кеша с тегами. Например, блок зависит от конкретного инфоблока или сущности. После изменения данных очищается только связанный кеш, а не весь сайт.
Это особенно важно на нагруженных проектах: глобальная очистка может создать всплеск одновременных тяжёлых запросов, потому что всем пользователям придётся заново прогревать страницы.
Композит — не универсальная кнопка ускорения
Композитный сайт хорошо работает для страниц, где большая часть HTML одинакова для разных посетителей. Но персональные данные — корзина, авторизация, индивидуальные цены, количество непрочитанных уведомлений — должны оставаться динамическими.
Если динамические зоны размечены неправильно, пользователь может увидеть чужое состояние или устаревший фрагмент интерфейса. Поэтому композит нужно включать после проверки ключевых сценариев, а не до неё.
Собственный кеш требует правил инвалидирования
Разработчик может кешировать результат тяжёлой функции, API-запроса или сложной выборки. Но рядом с кодом создания кеша должен существовать понятный механизм его очистки.
Хороший вопрос для ревью: «Что конкретно должно произойти, чтобы этот кеш перестал быть актуальным?» Если ответа нет, проблема появится позже.
Что делать с внешними данными
Интеграции усложняют ситуацию. Например, остатки приходят из 1С раз в несколько минут, цены — из другой системы, а на сайте есть собственный кеш каталога. Тогда нужно понимать всю цепочку: когда данные обновились в базе, когда очистился кеш, когда изменилась карточка и когда новый ответ увидел CDN.
Лучше документировать эту последовательность и логировать время каждого этапа. Это сильно сокращает диагностику.
Практический чек-лист
- Найдите самые тяжёлые страницы и запросы.
- Определите, какие данные на них действительно меняются часто.
- Кешируйте дорогие и редко меняющиеся части.
- Используйте точечный сброс вместо массовой очистки.
- Проверьте динамические зоны после включения композита.
- Разделяйте кеш приложения, PHP, браузера и CDN.
- После обновления данных проверяйте не только админку, но и публичный ответ.
Хороший кеш не просто живёт определённое время — он знает, когда именно становится недействительным.
Если сайт работает медленно или после изменений периодически показывает старые данные, это повод проверить архитектуру кеширования в рамках технической поддержки 1С-Битрикс.