Ключ ячейки блока — это ответ на вопрос «при каких условиях разметка будет одинаковой». Забыли что-то положить в ключ — один вариант разметки получают все. Три случая, когда это ударило по живым посетителям.

Это третья часть цикла «Кэш фрагментов и Redis».

1. Хост: отравление поддоменов

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

Лечение двойное: хост в ключе и «канонический шлюз» — на поддомене устаревшая ячейка считается MISS и пересобирается в запросе посетителя, в правильном контексте, а не фоном.

2. Мобильность — из User-Agent, а не из запроса

Фронт присылал признак мобильного устройства параметром: mob=false. Сервер проверял его через isset. Но строка «false» существует — isset всегда давал true. Одна ячейка на всех, и десктоп получал мобильную сетку.

Признак этой ошибки в реестре — странная ячейка, где в ключе одновременно «десктоп» и мобильный параметр. Лечение — определять устройство на сервере по User-Agent, так же, как это делает ключ кэша страниц.

3. Параметры формы

Всплывающая форма «узнать цену» строилась под товар: название, картинка, цена. Параметры товара в ключ не входили. Первый, кто открыл форму, запёк в кэш свой товар — и все остальные видели его. Кнопка «Заказать» на другой странице открывала форму с ценой 0 ₽ и без картинки.

Вдобавок имена параметров расходились: фронт слал id, сервер ждал post_id.

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

Правило при смене ключа

Меняете состав ключа — в той же правке поправьте перечень ожидаемых ячеек. Иначе сторож полноты ищет ячейки по старому ключу, не находит холодных и молча пишет «холодных: 0» (восьмая часть).

Посетители видят чужие данные в блоках?

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

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

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

Комментарии

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

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