После выката кэш фрагментов холодный целиком: версия кода сменилась, все ячейки — жёсткий MISS. В обычном режиме воркер прогрева идёт аккуратно, чтобы не мешать посетителям. После выката аккуратность — это часы холодного сайта. Нужен ускоренный догрев — и вопрос, когда его выключать.
Это тридцать восьмая часть цикла «Кэш страниц без MISS».
Ограничитель — время, а не счётчик
Обычный прогон ограничен числом рендеров. Ускоренный — временем: 40 секунд работы, пауза между рендерами 0,1 с вместо 0,3. За прогон — 75 рендеров против 15–18.
Включать по состоянию, а не по таймеру
Сначала ускоренный режим держался 20 минут после выката. На крупном каталоге окно закрылось, когда холодными оставались 3118 ячеек: сторож находил холодное быстрее, чем воркер успевал рендерить.
Теперь режим держится, пока в очереди больше 300 холодных ячеек. Результат: 4229 → 0 за 33 минуты, около 310 рендеров в минуту, нагрузка 0,04–0,22 на шести ядрах.
Когда 20 минут мало совсем
При 33 тысячах ячеек полный догрев занимает 2,5–3 часа. Всё это время первый заход на холодный блок — 0,91–1,25 с против 0,21–0,35 с из кэша. Поэтому окно продлевается, пока сторож видит холодное, с потолком в 3 часа — на случай, если что-то пошло не так.
function warm_burst_active(): bool {
$since = (int) get_option('warm_burst_since');
if (!$since) {
return false;
}
if (time() - $since > 3 * HOUR_IN_SECONDS) { // потолок
delete_option('warm_burst_since');
return false;
}
if (warm_queue_size() < 300) { // хвост маленький — выключить
delete_option('warm_burst_since');
return false;
}
return true;
}
На маленьком сайте это почти незаметно
На сайте поменьше после выката было 596 холодных ячеек. Около 100 рендеров в минуту — и через 6 минут всё тёплое. Ускоренный режим там почти не включается, но и не мешает: логика одна для всех сайтов.
Ускоренный режим подчиняется защите по нагрузке (предыдущая часть): мягкий порог гасит его первым.
После выката сайт долго холодный?
Пришлите адрес — посчитаю, сколько у вас ячеек и сколько они реально греются.
// загружаю комментарии…