Разработчик правит PHP-шаблон блока, обновляет страницу — изменений нет. Жмёт «очистить кэш», обновляет — опять старое. Ещё раз — появилось. Кажется, что кэш сломан. На деле он работает ровно как задуман, и это стоит понимать до того, как начать его «чинить».
Это девятнадцатая часть цикла «Кэш страниц без MISS».
Что обновляет блок в кэше
Ячейка блока (фрагмента, о них — отдельный цикл) считается устаревшей только когда меняется одно из трёх:
- версия кода — у нас это время изменения манифеста сборки фронта;
- версия данных блока — её поднимает сброс;
- время изменения записи, к которой относится блок.
Правка PHP-шаблона не меняет ни одно из трёх. Сборка фронта не запускалась — версия кода та же.
Почему «очистить» не помогает с первого раза
Сброс не удаляет ячейку, а поднимает версию — ячейка становится устаревшей. А устаревшая ячейка, по задумке, отдаётся мгновенно, пока фоном собирается новая. Поэтому первое открытие после сброса показывает старое, второе — новое. Это не баг: ровно это и защищает посетителей от MISS.
Рецепт для разработки
- Тронуть файл в исходниках фронта и пересобрать: меняется версия кода, и ячейки получают жёсткий MISS — старое не покажется ни разу.
- Выключить кэш ключом на тестовой копии на время вёрстки (сороковая часть).
Как не обмануться при проверке
Не судите по странице глазами — сравните текст шаблона с HTML внутри самой ячейки. Если в ячейке старая разметка, вопрос в версии. Если новая, а страница старая — дело в кэше страницы или браузера.
Открытый вопрос
Можно отключать кэш фрагментов для залогиненного администратора — тогда он всегда видит свежее. Минус — администратор перестаёт видеть то, что видят посетители, и не заметит проблему с кэшем. Единого решения у нас пока нет: на одних сайтах это мешает, на других — нет.
Правите шаблон, а сайт показывает старое?
Пришлите адрес — разберусь, какой слой кэша держит старую версию.
// загружаю комментарии…