Стандартный конфиг кэша для WordPress выключает кэш, если у посетителя есть определённые куки: залогинен, ввёл пароль к записи, оставил комментарий. Список так и просится дополнить: добавили сравнение товаров — добавили куку сравнения, добавили лайки — куку лайков. Это ошибка, и платят за неё самые активные посетители.

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

Что происходит

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

Замер на одном сайте: главная для такого посетителя — 1,4 с вместо 0,07 с.

Правило: что куда

ЧтоКудаПочему
вход в админку, пароль записи, автор комментарияобход кэшастраница действительно у каждого своя
язык, регионключ кэшавариантов мало, каждый можно прогреть
сравнение, избранное, лайкисостояние на клиентесервер рисует нейтральную разметку, скрипт дорисовывает по куке
страница сравненияобход кэша по адресуеё содержимое у каждого своё
map $http_cookie $skip_cache_cookie {
    default 0;
    ~*wordpress_logged_in_ 1;
    ~*wp-postpass_         1;
    ~*comment_author_      1;
}
map $request_uri $skip_cache_uri {
    default 0;
    "~*^/compare(/|$|\?)" 1;
}

Ловушка при переносе на клиент. Если убрать куку из обхода, но сервер продолжит читать её при рендере (например, рисовать счётчик сравнения в шапке), первый посетитель на MISS запечёт в кэш свой счётчик — и все увидят «в сравнении: 3». Сервер должен перестать читать такую куку совсем.

А как же лайк, который меняет страницу

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

Проверка

# с прикладной кукой ответ должен оставаться HIT
curl -s -o /dev/null -D - -H "Cookie: compare=1" https://сайт/ | grep -i x-cache-status

Сайт медленный у постоянных посетителей?

Пришлите адрес — проверю, какие куки выключают у вас кэш.

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

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

Комментарии

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

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