Кэш блоков сбрасывается, когда меняются данные. А что, если данные не менялись, а поменялся файл? Миниатюра дорезалась, превью видео сгенерировалось — в базе ничего не произошло, ни один хук не сработал, а разметка в кэше уже устарела.
Это тринадцатая часть цикла «Кэш фрагментов и Redis».
Оригиналы вместо нарезки
В тему добавили новый размер миниатюры для карточек. В момент первого рендера нарезки этого размера ещё не было, и плагин миниатюр отдал в разметку оригиналы. Разметка легла в кэш — и осталась там: нарезка появилась через минуту, но кэш об этом не узнал.
Итог: 74 картинки прямо из папки загрузок, 26,6 МБ в блоках главной. Мобильная главная весила 15,75 МБ.
Будить кэш маркером
Генератор после завершения работы оставляет файловый маркер, а крон-сторож его подхватывает:
- генератор миниатюр или превью закончил партию — записал маркер с перечнем затронутых записей;
- сторож на тике крона нашёл маркер — поднял версии блоков этих записей и поставил страницы в чистку с прогревом;
- маркер удалён.
После трёх циклов «очередь → сброс → воркер» оригиналов в разметке стало 74 → 9 → 0. Мобильная главная — 15,75 → 2,93 МБ.
Тонкость: смена качества
Если в настройке размера поменяли качество, существующие файлы не пересоздаются сами. А если сбросить кэш раньше, чем они пересоздались, полчаса в разметке будет старый jpg на 201 КБ вместо avif на 149 КБ. Сначала дождаться генератора — потом будить кэш.
Родственная история — когда разметка с картинками без avif и webp замерзает в кэше страниц на неделю, — разобрана отдельно в цикле «PageSpeed без мифов».
В блоках сайта оригиналы картинок вместо уменьшенных?
Пришлите адрес — проверю, узнаёт ли кэш о готовых миниатюрах.
// загружаю комментарии…