Правка не видна на сайте - какой кэш сбросить
Данные в админке изменены, а сайт показывает прежнее. Разбираем причины в порядке убывания частоты - все они про разные уровни кэша.
С чего начать
Смотрим, что вообще включено:
echo COption::GetOptionString('main', 'component_cache_on', 'Y'), "\n"; // кэш компонентовecho COption::GetOptionString('main', 'composite_mode', 'N'), "\n"; // композитecho defined('BX_COMP_MANAGED_CACHE') ? 'управляемый кэш включён' : 'выключен', "\n";// значения по умолчанию видны, если настройку ни разу не меняли рукамиecho COption::GetOptionString('main', 'component_managed_cache_on', 'Y'), "\n";// управляемый кэш компонентов включают вместе с константой, а не вместо неёУровней кэша три, и они вложены друг в друга. Пока не ясно, какой из них отдаёт старое, сброс «всего сразу» лечит симптом, не объясняя причины и обнуляя работу кэша для всех посетителей.
Проверяем, отдаётся ли страница из композита:
curl -sI https://example.com/catalog/ | grep -iE 'x-bitrix-composite|cache'# страница из композита помечается служебным заголовком ответаcurl -sI -H 'Cache-Control: no-cache' https://example.com/catalog/ | grep -i cache# разница между двумя ответами показывает, кэширует сам сайт или посредник# параметр ncc=1 в адресе просит платформу собрать страницу мимо копииКомпозитный сайт отдаёт готовый файл до того, как запрос дойдёт до PHP. Правка в админке такой файл не трогает, и посетитель видит старую страницу даже при сброшенном кэше компонентов.
Сбрасываем точечно, а не всё подряд:
// кэш конкретного компонента на страницеBXClearCache(true, '/catalog/');// управляемый кэш инфоблока: сбрасывается сам при правке элементаCIBlock::CleanCache($iblockId);// композит целикомCHTMLPagesCache::getInstance()->deleteAll();// после сброса первый заход собирает страницу заново и отвечает медленнееТочечный сброс возвращает страницу к актуальному виду, не обнуляя кэш всего сайта. Полный сброс на нагруженном проекте в час пик даёт всплеск нагрузки и собственный набор жалоб.
Причины
-
Кэш компонента ещё живёт примерно 35% случаев
ПризнакПравка видна в админке, на витрине - старое, через час само исправляется.
ПроверкаСмотрим время жизни кэша у компонента, который выводит эти данные.
Что делатьСбрасываем кэш этого компонента и включаем управляемый кэш, чтобы правка применялась сразу.
-
Страница отдаётся композитом примерно 25% случаев
ПризнакПервый заход показывает старое, обновление страницы иногда помогает.
ПроверкаСмотрим служебные заголовки ответа: у композитной страницы они свои.
Что делатьСбрасываем композитный кэш нужного адреса и проверяем состав динамических областей.
-
Правка сделана не в том месте примерно 20% случаев
ПризнакНикакой сброс не помогает, данные на сайте другие с самого начала.
ПроверкаПроверяем, тот ли инфоблок, тот ли сайт и тот ли шаблон правились.
Что делатьПравим нужный источник: на мультисайте и при двух инфоблоках это самая частая история.
-
Кэш браузера или прокси примерно 12% случаев
ПризнакУ одного человека старое, у другого свежее, в режиме инкогнито всё верно.
ПроверкаОткрываем страницу с обходом кэша браузера и смотрим заголовки ответа.
Что делатьПравим заголовки кэширования для страниц и добавляем метку версии к статике.
-
Кэш ускорителя PHP примерно 8% случаев
ПризнакПравка в файле шаблона не применяется, хотя файл на сервере изменён.
ПроверкаСверяем время изменения файла с тем, что отдаёт сайт, и смотрим настройки ускорителя.
Что делатьСбрасываем кэш ускорителя или перезапускаем процессы PHP после выкладки.
Частые вопросы
Почему нельзя просто выключить кэш?
Он снимает с базы основную нагрузку. Выключенный кэш превращает каждую страницу в десятки запросов, и сайт ложится под обычным трафиком.
Что такое управляемый кэш?
Режим, в котором кэш компонента сбрасывается сам при изменении связанных данных. Он и решает большую часть жалоб «правка не видна».
Как проверить правку, не сбрасывая кэш?
Открыть страницу с параметром обхода кэша либо посмотреть данные напрямую в админке. Полный сброс ради проверки - лишний шаг.
Помогает ли перезапуск веб-сервера?
Он сбрасывает кэш ускорителя PHP, но не трогает кэш компонентов и композит. Как универсальное лекарство он не работает.
Смежное
-
Медленный сайт - оглавление подтемы
-
Настройка не применяется: разбор причин - когда дело не в кэше, а в настройке
-
Кэш не срабатывает: страница собирается заново каждый раз - обратный случай: кэш не работает вовсе
-
Кеширование - устройство уровней кэша
-
Композитный сайт - кэш страницы целиком
-
Производительность - устройство скорости целиком
-
Кэширование своей выборки: ключ, теги, сброс - свой кэш и его сброс
-
Тегированный кэш: сброс по изменению данных, а не по расписанию - как сделать сброс автоматическим
-
Проверка сайта перед акцией: нагрузка, узкие места, план дня - кэш в день высокой нагрузки
-
Выкладка на боевой: порядок, структура, откат - сброс кэша как шаг выкладки
-
Композитный сайт: включение, динамические области, сброс - отдельный уровень со своим сбросом
-
Включаемые области: файлы, области шаблона, правка менеджером - почему правка области не видна
-
Композит не включается на странице: причины по убыванию частоты - когда композита на странице нет вовсе
-
Компонент не отдаёт нужных данных: причины по убыванию частоты - частая причина «правка не работает»
-
Стили и скрипты не подключились: разбор причин - когда виновато объединение файлов
-
Правки не доехали на боевой: разбор причин - когда виноват не кэш, а сама выкладка
-
Композит изнутри: статическая копия, зоны, пересборка - что именно сбрасывает статическую копию