На тестовой копии сайта посетителей нет, а прогрев работает так же, как на рабочем: обходит страницы, рендерит блоки, сторож проверяет полноту. Цена — около 1,5 ядра процессора круглосуточно ради кэша, который никто не откроет. А при разработке прогрев ещё и мешает: правишь шаблон, а воркер тут же переписывает ячейки.

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

Два ключа в wp-config

КлючЧто выключаетЧто остаётся
CACHE_WARM_DISABLEDвесь прогрев: обход страниц, воркер блоков, сторож полноты, ускоренный догревсам кэш и инвалидация — сбросы работают как обычно
CACHE_DISABLEDвсё перечисленное плюс сам кэш: страницы и блоки не хранятсяничего — сайт работает без кэша
// wp-config.php тестовой копии
define('CACHE_WARM_DISABLED', true);   // только прогрев
// define('CACHE_DISABLED', true);     // или кэш целиком — на время вёрстки

Как выключается кэш страниц из PHP

Кэш страниц живёт в nginx, и PHP его, казалось бы, не контролирует. Но nginx слушается заголовка X-Accel-Expires от приложения:

add_action('send_headers', function () {
    if (defined('CACHE_DISABLED') && CACHE_DISABLED) {
        header('X-Accel-Expires: 0');   // nginx не сохранит этот ответ
    }
});

Это работает, потому что в fastcgi_ignore_headers у нас перечислены только Cache-Control и Expires. Если там есть и X-Accel-Expires, nginx заголовок проигнорирует.

Ворота в точках входа

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

function cache_warm_enabled(): bool {
    return !(defined('CACHE_WARM_DISABLED') && CACHE_WARM_DISABLED)
        && !(defined('CACHE_DISABLED') && CACHE_DISABLED);
}

add_action('warm_worker', function () {
    if (!cache_warm_enabled()) return;
    // ...
});

Грабли

  • Включили CACHE_DISABLED — а страница всё равно из кэша. Разовый полный сброс при появлении ключа делает PHP, а HIT-страница до PHP не доходит. Нужен хотя бы один запрос, который дойдёт до PHP: любая страница не из кэша или вход в админку.
  • Устаревший блок при выключенном прогреве живёт до конца срока — неделю: обновлять его фоном некому. Поэтому при выключенном прогреве устаревшая ячейка читается как MISS и пересобирается сразу.
  • Проверочный скрипт без ключа сам наполняет очереди. Один запуск зонда на тесте поставил в очередь 357 адресов и 2506 задач — и всё это потом честно греется.

Тестовая копия грузит сервер без посетителей?

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

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

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

Комментарии

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

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