Сбросы кэша приходят из двух очень разных источников. Человек в админке сохраняет одну запись и ждёт увидеть её на сайте. Обмен с 1С сохраняет сотни товаров волной раз в несколько минут. Одна стратегия для обоих не работает.

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

Правка из админкиПоток 1С
чего ждут«сохранил — и вижу»ничего, лишь бы не тормозило
объёмодна записьсотни записей волной
когда чиститьсразу, в конце запросас задержкой (дебаунс), пачкой
как гретьтут же, все вариантыобщей очередью прогрева

Как различить источник

function cache_is_human_edit(): bool {
    return is_admin()
        && !wp_doing_cron()
        && !(defined('REST_REQUEST') && REST_REQUEST);
}

add_action('shutdown', function () {
    if (cache_is_human_edit()) {
        cache_flush_pending_now();     // сразу: чистка + прогрев
    } else {
        cache_schedule_flush(60);      // обмен: копить и чистить пачкой
    }
});

Обмен 1С приходит через REST API или крон, поэтому проверки REST_REQUEST и wp_doing_cron отделяют его от человека.

Почему не всё сразу

Если чистить сразу и поток обмена, каждая волна превращается в сотни синхронных чисток и прогревов. Дебаунс собирает адреса за минуту, убирает повторы и чистит один раз. Для обмена задержка в минуту незаметна — для человека в админке она выглядит как «не сохранилось».

На одном сайте мы нашли ровно эту ошибку: функция немедленной чистки была написана, но не вызывалась — правки редактора шли через ту же минутную задержку (четырнадцатая часть).

Как проверить, не трогая контент на рабочем сайте

Не нужно править реальную запись: достаточно поставить адрес в очередь чистки и вызвать немедленный сброс из консоли WordPress, а потом запросить страницу и проверить, что она пересобралась и снова в кэше.

Редакторы жалуются, что правки появляются не сразу?

Пришлите адрес — проверю, как у вас разделены правки и обмен.

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

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

Комментарии

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

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