Показываем заказчику, как быстро теперь работает каталог. Открываем DevTools, чтобы показать заголовки, — и получаем MISS. Прямо на демо. Ячейка была прогрета, но не та.
Это двенадцатая часть цикла «Кэш фрагментов и Redis».
Почему DevTools дали MISS
Открытая панель DevTools сужает окно браузера. Скрипт каталога выбирает число карточек под ширину окна — и отправил другой набор параметров. Прогрев грел набор для полной ширины. Для сервера это другая ячейка, и её никто не грел.
Посетители с узким экраном получали тот же MISS каждый день — просто никто не открывал DevTools.
Ещё два расхождения
- не тот тип записей. Прогрев грел пагинацию записей типа «запись», а статьи на сайте жили в отдельном типе. Пагинация статей не прогревалась никогда;
- не та группировка. Сетка группирует карточки по рядам, поэтому 259 товаров — это 5 страниц на компьютере и 8 на телефоне. Прогрев считал одинаково для обоих.
Правило
Параметры прогрева брать из серверной разметки, а не из кода прогрева. Если блок в разметке объявлен с data-type="articles" и data-count="12", прогрев читает их оттуда (седьмая часть). Код прогрева не должен знать, какие параметры шлёт фронт, — он должен их прочитать.
Для параметров, которые зависят от ширины окна, источник — реестр живых запросов: какие наборы реально приходили от посетителей, те и греются.
Как проверить совпадение
- открыть страницу в браузере на нескольких ширинах окна, включая узкую;
- на вкладке «Сеть» сравнить тело ajax-запроса блока с ключом прогретой ячейки — побайтно;
- каждый запрос должен дать HIT.
Блоки прогреты, а у части посетителей всё равно медленно?
Пришлите адрес — сверю параметры прогрева с тем, что шлёт фронт.
// загружаю комментарии…