Кэш в 1С-Битрикс: почему на сайте видны старые данные
В 1С-Битрикс кэширование устроено в несколько слоёв. Поэтому ситуация “в админке изменили, а на сайте старое” не всегда решается одной кнопкой “очистить кэш”. Старые данные могут держаться в кэше компонентов, managed cache, композитном кэше, OPcache, браузере или CDN.
На практике лучше сначала понять, какой именно участок не обновляется: текст страницы, список товаров, меню, цена, остаток, CSS, JS или персональный блок пользователя.
Очистка через админку
Для быстрой проверки можно начать с административного раздела: Настройки → Настройки продукта → Автокеширование. Там обычно очищают весь кэш или только устаревшие файлы.
Если после полной очистки проблема исчезла, значит причина действительно в кэше. Но это ещё не финальное решение. Нужно понять, почему конкретный кэш не сбрасывается при изменении данных.
Компонентный кэш
Многие стандартные компоненты Битрикс кэшируют результат выборки и шаблон. Например, список новостей, каталог, меню или карточки товаров. В параметрах компонента нужно проверить CACHE_TYPE и CACHE_TIME.
$APPLICATION->IncludeComponent(
'bitrix:news.list',
'articles',
[
'IBLOCK_ID' => 5,
'NEWS_COUNT' => 10,
'CACHE_TYPE' => 'A',
'CACHE_TIME' => 36000000,
]
);
Если CACHE_TYPE стоит A, компонент подчиняется глобальному автокешированию. Если стоит Y, кэш включён принудительно. Если N — выключен. На рабочем сайте кэш обычно нужен, но при отладке его можно временно отключить, чтобы проверить гипотезу.
managed cache
Managed cache должен сбрасываться при изменении связанных данных. Например, при изменении элемента инфоблока кэш компонента может инвалидироваться по тегу. Но если данные получаются нестандартным запросом или через собственный код, автоматический сброс может не сработать.
В старом коде часто встречается ручное кэширование через CPHPCache. Тогда нужно искать InitCache, StartDataCache и EndDataCache.
$cache = new CPHPCache();
$cacheTime = 3600;
$cacheId = 'main_menu';
if ($cache->InitCache($cacheTime, $cacheId, '/menu/')) {
$result = $cache->GetVars();
} elseif ($cache->StartDataCache()) {
$result = [];
// получение данных
$cache->EndDataCache($result);
}
Если такой кэш создаётся вручную, нужно отдельно предусмотреть его очистку при изменении данных.
Композитный кэш
Композит может отдавать HTML-страницу быстро, но из-за него иногда кажется, что сайт “не видит” изменения. Особенно если динамический блок случайно попал в статическую часть.
- проверить, включён ли композит;
- проверить, обновляется ли страница после очистки композитного кэша;
- проверить динамические области для корзины, авторизации, персональных блоков;
- убедиться, что пользовательские данные не закэшированы как общие.
Файлы CSS и JS
Если старой остаётся только верстка, проблема может быть не в Битрикс-кэше данных, а в статиках. Нужно проверить объединение и минификацию CSS/JS, кэш браузера и timestamp ресурсов.
curl -I https://example.ru/bitrix/cache/css/...
После изменения шаблонов иногда помогает очистка кэша CSS/JS в админке и проверка, что браузер действительно загрузил новый файл.
OPcache
Если изменился PHP-файл, но сервер продолжает выполнять старый код, стоит проверить OPcache. Это особенно заметно после ручного деплоя или на серверах с агрессивными настройками.
php -i | grep opcache.enable
php -i | grep opcache.validate_timestamps
При необходимости перезапускают PHP-FPM:
sudo systemctl restart php8.2-fpm
Что проверить по порядку
- Понять, что именно не обновляется: данные, HTML, CSS, JS или персональный блок.
- Очистить весь кэш через админку для проверки гипотезы.
- Проверить параметры CACHE_TYPE и CACHE_TIME у компонента.
- Найти ручной CPHPCache в шаблонах и include-файлах.
- Проверить композитный кэш и динамические области.
- Проверить кэш CSS/JS и браузер.
- Проверить OPcache после изменения PHP-кода.
- Настроить точечную инвалидацию, если кэш сбрасывается только вручную.
Если кэш приходится постоянно очищать руками, это не рабочий процесс, а симптом. Нормальная настройка кэша должна ускорять сайт и при этом обновляться в понятных местах: при изменении элемента, раздела, меню, цены или шаблона.
Комментарии (0)
Пока нет комментариев. Будьте первым!