Жалоба звучала так: «переключаешь варианты товара — иногда долго». Иногда — значит, не всегда. Значит, кэш есть, но не везде. Разбор привёл к тому, что у точечной чистки была своя очередь прогрева — и она молча умирала.

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

Что нашли

К полудню из 212 товарных страниц в кэше оставалось около 40. Остальные отвечали за 2,4–3,7 секунды вместо 0,016.

Точечная чистка после обмена 1С складывала адреса в собственную очередь прогрева и ставила разовое событие крона. Событие однажды не выполнилось — и больше никто его не ставил. Сторожа у этой очереди не было. Страницы чистились, но не прогревались.

Почему своя очередь — плохая идея

  • у основного обходчика есть замок, перепланирование, сторож, обрыв по времени, защита по нагрузке — у самодельной очереди этого нет;
  • каждая починка надёжности делается дважды — или забывается во втором месте;
  • две очереди греют одни и те же адреса параллельно и мешают друг другу.

Решение

Точечная чистка кладёт адреса в голову очереди основного обходчика:

function warm_queue_push_front(array $paths): void {
    wp_cache_delete('page_warm_queue', 'options');
    $queue = (array) get_option('page_warm_queue', []);
    $queue = array_values(array_unique(array_merge($paths, $queue)));
    update_option('page_warm_queue', $queue, false);
    warm_schedule_next(); // одна точка планирования — она же под сторожем
}

Срочное идёт первым, вся надёжность основного воркера достаётся точечной чистке бесплатно.

Общее правило: один воркер, одна очередь, одна точка планирования, один сторож. Каждый новый «быстрый путь» прогрева — это ещё одно место, где очередь может встать (тридцать пятая часть).

Страницы то быстрые, то медленные?

Пришлите адрес — проверю, не умирает ли у вас какая-то из очередей прогрева.

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

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

Комментарии

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

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