При кэше на неделю выкат без сброса означает неделю страниц, собранных старыми шаблонами и ссылающихся на старые скрипты. Поэтому сброс при выкате — обязательное условие длинного кэша (четвёртая часть). Мы делаем его не в пайплайне выката, а в самой теме.
Это двадцатая часть цикла «Кэш страниц без MISS».
Детектор по манифесту сборки
Каждая сборка фронта пишет манифест — файл со списком собранных бандлов. Время его изменения меняется ровно при выкате новой сборки. Тема сравнивает это время с сохранённым значением:
add_action('wp_loaded', function () {
$manifest = get_theme_file_path('assets-dist/manifest.json');
$sig = (string) @filemtime($manifest);
if ($sig === '' || $sig === get_option('cache_asset_sig')) {
return;
}
update_option('cache_asset_sig', $sig, false);
error_log('cache: manifest changed → full purge');
cache_purge_all();
do_action('cache_purged'); // сигнал: поставить круг прогрева
});
Проверка срабатывает на любом запросе к PHP — и от живого посетителя, и от системного крона раз в минуту. Поэтому выкат замечается в течение минуты, даже если посетителей нет.
Подтверждение на рабочем сайте: выкат в 11:15, строка «manifest changed → full purge» в журнале — в 11:17:09, ровно одна за неделю.
Сигнал после сброса
Сброс без прогрева — тот же MISS, только массовый. На одном сайте выкат шёл в обход действия, на которое был подписан прогрев, — кэш чистился, а круг обхода не вставал. Нужно отдельное действие «сброс выполнен», и прогрев вешается на него.
Как мы ошиблись в диагнозе
В какой-то момент мы решили, что выкат вообще не сбрасывает кэш: поиск по конфигурации CI нашёл ноль упоминаний кэша. Вывод был ложным — сброс живёт в теме, а не в CI. Мало того, на одном сайте тот же механизм назывался по-другому, и поиск по привычному имени его не находил.
Ищите по нескольким именам и по сути — «где сравнивается время манифеста», — а не по одному названию опции.
Сколько наполняется кэш после выката
На каталоге среднего размера — около полутора часов. Холодный рендер в двух вариантах устройства занимает 3–4 секунды на адрес, прогон обхода (~46 с) успевает 5–17 адресов. Через 8 минут после выката прогрето 22 % страниц — главная и самые посещаемые товары идут первыми.
Заказчик решил не ускорять: остальное время посетители получают уже прогретые важные страницы, а хвост доходит за полтора часа.
Мерить без запросов к сайту. Каждый проверочный запрос сам прогревает страницу, и замер начинает врать. Число прогретых считайте по строкам KEY: в файлах кэша (пятая часть).
После выката сайт долго медленный?
Пришлите адрес — проверю, как у вас устроены сброс и прогрев после выката.
// загружаю комментарии…