Стандартный конфиг кэша для 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
Сайт медленный у постоянных посетителей?
Пришлите адрес — проверю, какие куки выключают у вас кэш.
// загружаю комментарии…