Разработчик правит PHP-шаблон блока, обновляет страницу — изменений нет. Жмёт «очистить кэш», обновляет — опять старое. Ещё раз — появилось. Кажется, что кэш сломан. На деле он работает ровно как задуман, и это стоит понимать до того, как начать его «чинить».

Это девятнадцатая часть цикла «Кэш страниц без MISS».

Что обновляет блок в кэше

Ячейка блока (фрагмента, о них — отдельный цикл) считается устаревшей только когда меняется одно из трёх:

  • версия кода — у нас это время изменения манифеста сборки фронта;
  • версия данных блока — её поднимает сброс;
  • время изменения записи, к которой относится блок.

Правка PHP-шаблона не меняет ни одно из трёх. Сборка фронта не запускалась — версия кода та же.

Почему «очистить» не помогает с первого раза

Сброс не удаляет ячейку, а поднимает версию — ячейка становится устаревшей. А устаревшая ячейка, по задумке, отдаётся мгновенно, пока фоном собирается новая. Поэтому первое открытие после сброса показывает старое, второе — новое. Это не баг: ровно это и защищает посетителей от MISS.

Рецепт для разработки

  • Тронуть файл в исходниках фронта и пересобрать: меняется версия кода, и ячейки получают жёсткий MISS — старое не покажется ни разу.
  • Выключить кэш ключом на тестовой копии на время вёрстки (сороковая часть).

Как не обмануться при проверке

Не судите по странице глазами — сравните текст шаблона с HTML внутри самой ячейки. Если в ячейке старая разметка, вопрос в версии. Если новая, а страница старая — дело в кэше страницы или браузера.

Открытый вопрос

Можно отключать кэш фрагментов для залогиненного администратора — тогда он всегда видит свежее. Минус — администратор перестаёт видеть то, что видят посетители, и не заметит проблему с кэшем. Единого решения у нас пока нет: на одних сайтах это мешает, на других — нет.

Правите шаблон, а сайт показывает старое?

Пришлите адрес — разберусь, какой слой кэша держит старую версию.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.