Отчёт воркера выглядел образцово: каждый прогон — полный бюджет рендеров, ошибок нет, замок снимается. А очередь из 32 659 ячеек таяла так медленно, что первый клик посетителя попадал на холодное: 0,8–1,0 с вместо 0,12 с на повторе.

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

Где пряталось время

Прогон работал 40 секунд и в конце ставил следующий запуск через 60 секунд — от конца прогона. А системный крон дёргает WordPress раз в минуту. Следующий запуск оказывался чуть позже очередного тика и ждал ещё одного. В итоге воркер работал 40 секунд из каждых 120.

Каждый прогон честно отрабатывал полный бюджет — поэтому счётчики и выглядели отлично. Простой был между прогонами, а его никто не мерил. С таким темпом очередь растаяла бы за 2,5 часа.

Лечение

ПараметрБылоСтало
следующий запускчерез 60 счерез 5 с
длина прогона40 с50 с
пауза между рендерами—0,07 с
повтор при замке—через 15 с

Темп вырос в 2,1 раза: примерно с 170 до 350 ячеек в минуту.

Потолок этого приёма

Даже с запуском «через 5 секунд» реальный интервал между прогонами вышел около 85 секунд: внешний планировщик, который дёргает крон, по всей видимости, отсчитывает минуту от конца предыдущего запуска. Дальше ускорять через wp-cron нельзя — следующий шаг уже выносить прогрев в отдельный постоянный процесс.

Что мерить

Мерьте интервал между временами последних прогонов, а не только число рендеров за прогон. Полный бюджет каждого прогона ничего не говорит о том, сколько прогонов в час.

// в конце прогона
$prev = (int) get_option('warm_last_run');
update_option('warm_last_gap', $prev ? time() - $prev : 0, false);
update_option('warm_last_run', time(), false);

Прогрев идёт, а холодного не становится меньше?

Пришлите адрес — посчитаю реальный темп воркера, а не его отчёт.

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

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

Комментарии

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

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