Как корректно выводить город доставки на карточке товара без ошибок кеша
Блок доставки на карточке товара кажется простой деталью, но именно в таких местах часто появляются неприятные ошибки. Самая типичная ситуация: один пользователь открывает страницу, система определяет его город, страница попадает в кеш, а следующий пользователь видит уже не свой город, а предыдущий.
Проблема не в самом тексте «Доставка Москва» или «Доставка Казань». Проблема в том, где именно этот текст формируется и на каком этапе попадает в итоговый HTML.
Разберём практичный способ, который помогает избежать смешивания данных между пользователями.
В чём суть ошибки
На многих проектах карточка товара кешируется целиком или частично. Это нормально: так страница открывается быстрее, снижается нагрузка на сервер и лучше держится трафик.
Ошибка начинается в момент, когда в кешируемый шаблон вставляют пользовательское значение:
- определённый город;
- регион;
- индивидуальную цену;
- остаток по конкретному складу;
- любой другой параметр, зависящий от текущего посетителя.
Если такой фрагмент сохраняется в общем кеше, следующий посетитель может получить не свои данные.
Почему это особенно заметно на блоке доставки
Блок доставки находится на видном месте и читается очень быстро. Пользователь сразу замечает, если видит чужой город. Кроме того, этот текст влияет на доверие и на сценарий покупки. Если посетителю показывают доставку не в его регион, он может решить, что сайт вообще не работает с его городом.
Поэтому здесь нужен не просто «рабочий вывод», а правильное разделение ответственности:
- кешируемая часть должна содержать только общую разметку;
- персональные данные должны подставляться отдельно.
Какой подход считается безопасным
Надёжный вариант состоит из двух шагов:
- Внутри кешируемого шаблона оставить плейсхолдер или нейтральный контейнер.
- Подставлять город уже после формирования кешируемой части, на этапе финального вывода.
Смысл этого подхода простой: общий HTML можно кешировать, а пользовательский фрагмент должен жить отдельно.
Почему не стоит вставлять город прямо в шаблон карточки
Когда город определяется до сохранения HTML в кеш, возникают такие риски:
- пользователи видят чужой город;
- сложно воспроизвести ошибку, потому что она зависит от очередности запросов;
- очистка кеша временно помогает, но не лечит архитектуру;
- отладка становится запутанной, потому что смешиваются кеш, cookie и GeoIP.
Если проблема уже проявилась хотя бы один раз, значит вывод организован не в том месте.
Что именно должно быть в кешируемой части
В кешируемой разметке лучше оставлять только то, что одинаково для всех:
- иконку доставки;
- подпись блока;
- общую структуру;
- статический текст вроде «Самовывоз сегодня»;
- контейнер под город.
Пример идеи:

Top comments (0)