До 10%Рекомендуйте нас и получайте процент за каждого приведённого клиента

Кэширование на фронтенде и на сервере: стратегия для e-commerce

Многослойное кэширование e-commerce: браузер, CDN, композит и серверный кэш в 1С-Битрикс

«Мы включили кэш, но сайт всё равно медленный» или обратное — «включили кэш, и клиенты стали видеть чужие корзины». Обе беды растут из одного корня: кэширование в e-commerce воспринимают как один переключатель, а это многослойная система, где каждый слой отвечает за своё и требует своей настройки.

В этой статье разберём кэширование интернет-магазина как стратегию: чем фронтенд-кэш отличается от серверного, как разделить данные на статику, персональное и часто меняющееся, как работают композит, HTTP-заголовки, CDN и версионирование и, главное, как всё это согласованно инвалидировать. Если хотите системно ускорить магазин, это делает услуга ускорения каталога и e-commerce.

Коротко

  • Кэш в e-commerce — это слои: серверный кэш, композит, браузер и CDN; каждый настраивается отдельно.
  • Начинайте с карты данных: статика, персональное и часто меняющееся кэшируются по-разному.
  • Персональные данные (корзина, цена клиента) выносятся в динамику композита, а не запекаются в кэш.
  • Главная сложность — согласованная инвалидация всех слоёв при изменении данных из 1С.

Кэш как многослойная система

Между «пользователь нажал ссылку» и «увидел страницу» данные проходят через несколько точек, и в каждой можно закэшировать. Это и есть слои:

Каждый слой убирает свою часть работы: серверный сокращает генерацию, композит — сборку страницы, CDN и браузер — сами обращения к серверу. Ошибка — думать, что достаточно одного слоя. Быстрый магазин использует все, но осознанно: где что кэшировать и на какой срок.

Карта данных: что и где кэшировать

Прежде чем настраивать слои, нужно разделить контент по типам — от этого зависит стратегия. В e-commerce данные делятся на три класса:

Тип данныхПримерыСлой и срок
СтатическийОписания, характеристики, изображения, категорииCDN + браузер + композит, долгий срок
Часто меняющийсяОстатки, цены, акцииТегированный кэш / динамика, короткий срок
ПерсональныйКорзина, авторизация, цена клиентаДинамика композита, не кэшируется публично

Эта карта — фундамент всей стратегии. Статику кэшируем надолго и на всех слоях, часто меняющееся — с точечной инвалидацией, персональное — не кэшируем публично вообще. Большинство проблем («устаревшие цены», «чужая корзина») возникает именно из-за того, что данные не разделили и закэшировали всё одинаково.

Слои кэширования ускоряют ответ БраузерзапросCDN / кэшготовый ответКомпозиткэш страницБазатолько при промахеБольшинство запросов отдаётся из кэша, до базы доходят единицы
Схема: между браузером и базой стоят слои кэша (CDN, композит). Большинство запросов отдаётся мгновенно из кэша, а до базы доходят единицы — сайт держит нагрузку.

Серверный кэш в 1С-Битрикс

Серверный слой — то, что происходит внутри платформы. Здесь работают кэш компонентов (список товаров, детальная страница, меню) и тегированный кэш, привязывающий закэшированный результат к конкретным данным. Когда товар меняется при обмене с 1С, инвалидируется только кэш с его тегом.

Под нагрузкой серверный кэш выносят из файловой системы в оперативную память через Redis или Memcached — это снимает конкуренцию за диск. Серверный слой снимает основную нагрузку с базы и PHP, но сам по себе не устраняет обращения к серверу: пользователь всё равно делает запрос, просто он обрабатывается быстрее. Чтобы убрать сами запросы, нужны фронтенд-слои. Оценить текущее состояние кэша и интеграций помогает аудит интеграций и e-commerce.

Композит: граница статики и динамики

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

Для e-commerce это принципиально: именно композит решает конфликт «хочу кэшировать страницу, но там персональные данные». Правильная граница — искусство: всё, что одинаково для всех, идёт в статику; всё, что зависит от пользователя, — в динамику. Если провести границу неверно, либо персональное попадёт в общий кэш (риск утечки), либо слишком много уйдёт в динамику (теряется эффект). Как выстроить под композит надёжную инфраструктуру, показано в статье про хостинг и инфраструктуру на BitrixVM.

HTTP-заголовки и браузерный кэш

Фронтенд-кэш начинается с HTTP-заголовков. Именно они говорят браузеру и CDN, что и на сколько можно хранить. Ключевые заголовки:

Стратегия проста: статику (CSS, JS, изображения, шрифты) отдаём с длинным max-age и public, потому что она меняется редко; HTML-страницы с персональными данными помечаем private или no-cache, чтобы их не хранили промежуточные узлы. Правильные заголовки убирают массу повторных запросов: вернувшийся пользователь берёт статику из браузера, вообще не обращаясь к серверу.

CDN для статики магазина

Интернет-магазин — это сотни и тысячи изображений товаров, и раздавать их с одного сервера расточительно. CDN распределяет статику по узлам, географически близким к пользователю: картинки, стили и скрипты грузятся быстрее и не нагружают ваш хостинг.

Что важно при подключении CDN к e-commerce: через CDN раздаётся именно статика, а персональная динамика идёт напрямую к серверу. Заголовки должны корректно разделять public-статику и private-контент, иначе CDN может закэшировать персональную страницу. При правильной настройке CDN снимает основную нагрузку по трафику изображений и заметно ускоряет загрузку каталога, особенно для географически распределённой аудитории. Для магазина с тяжёлым визуальным контентом это один из самых заметных по эффекту слоёв.

Версионирование статики

Длинный срок кэширования статики упирается в проблему: как обновить файл, который браузер держит месяцами? Ответ — версионирование. В ссылку на ресурс добавляют версию (style.css?v=20260108 или хэш в имени файла). Когда файл меняется, меняется версия в ссылке — браузер считает это новым ресурсом и загружает свежий.

Это даёт лучшее из двух миров: статике можно ставить максимально долгий срок жизни в браузере и CDN, но при любом изменении она гарантированно обновится, потому что поменяется URL. В 1С-Битрикс версионирование настраивается на уровне подключения CSS и JS. Без него вы либо ставите короткий срок кэша (теряя эффект), либо рискуете, что пользователи увидят старую вёрстку после обновления.

Принцип: «кэшируй навсегда, меняй имя». Долгий кэш статики безопасен ровно потому, что при изменении меняется URL ресурса. Это фундаментальный приём фронтенд-кэширования.

Инвалидация по слоям

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

Ключевая идея: у каждого слоя свой механизм инвалидации, и они должны быть согласованы с событиями обмена. Когда из 1С приходит новая цена, цепочка сброса должна сработать сверху донизу. Продумать это — половина работы; именно здесь чаще всего ломается кэширование e-commerce.

Цены, остатки и персонализация

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

Рабочие подходы: цену клиента и наличие помещают в динамическую область композита, чтобы они всегда были свежими; либо кэшируют с тегированной инвалидацией, привязанной к обмену остатков из 1С; либо дают им очень короткий срок жизни. Персональную цену по группе клиента вообще нельзя класть в публичный кэш — только в private-контекст авторизованного пользователя. Инструменты персонализации и рекомендаций поверх этого слоя тоже требуют аккуратности с кэшем — их мы разбираем в связке с AI-инструментами для сайта и e-commerce.

Service worker и PWA

Верхний, самый продвинутый слой фронтенд-кэша — service worker. Он позволяет программно управлять кэшем ресурсов в браузере, строить офлайн-сценарии и превращать магазин в PWA с опытом, близким к приложению. Для повторных визитов это даёт мгновенную загрузку оболочки сайта.

Но это дополнительная сложность, и она нужна не всем. Прежде чем внедрять service worker, стоит выжать эффект из HTTP-кэша, CDN, композита и серверного кэша — обычно этого достаточно для отличной скорости. Service worker оправдан, когда важен мобильный опыт уровня приложения, офлайн-доступ к каталогу и тонкий контроль над кэшированием. Внедрять его нужно осознанно, потому что неверная логика кэша в service worker может «залипнуть» и показывать устаревшие ресурсы.

Частые ошибки

Чек-лист стратегии

  1. Карта данных составлена. Контент разделён на статику, часто меняющееся и персональное.
  2. Серверный кэш настроен. Кэш компонентов и тегированный кэш работают, под нагрузкой — Redis.
  3. Композит подключён. Граница статики и динамики проведена корректно, персональное — в динамике.
  4. HTTP-заголовки заданы. Статика public с долгим сроком, HTML с персоналкой — private/no-cache.
  5. CDN раздаёт статику. Изображения и ресурсы идут через CDN, динамика — напрямую.
  6. Версионирование включено. Статика обновляется через смену URL, срок кэша длинный.
  7. Инвалидация согласована. Изменение данных из 1С сбрасывает все слои по цепочке.
  8. Цены и остатки свежие. Часто меняющиеся данные в динамике или с точечной инвалидацией.

Вывод

Кэширование в e-commerce — это не переключатель, а стратегия из нескольких слоёв. Серверный кэш и композит ускоряют генерацию и сборку страниц, HTTP-заголовки, CDN и версионирование убирают лишние обращения к серверу, а грамотное разделение данных защищает от устаревших цен и чужих корзин.

Начните с карты данных: разложите контент на статику, часто меняющееся и персональное, назначьте каждому свой слой и срок. Затем настройте слои снизу вверх и, главное, продумайте согласованную инвалидацию по событиям обмена с 1С. Именно это отличает быстрый и надёжный магазин от «включили кэш, а стало только хуже».

Частые вопросы

Чем отличается фронтенд-кэш от серверного?

Серверный кэш живёт на вашем сервере: он хранит результаты работы компонентов, запросов к базе и собранных страниц, снижая нагрузку на PHP и MySQL. Фронтенд-кэш живёт у клиента и в промежуточных узлах: браузер и CDN хранят статику и ответы по HTTP-заголовкам, экономя сами запросы к серверу. Первый ускоряет генерацию, второй устраняет часть обращений. В e-commerce нужны оба слоя.

Можно ли кэшировать HTML-страницу интернет-магазина целиком?

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

Как CDN помогает интернет-магазину?

CDN раздаёт статику (изображения товаров, CSS, JS, шрифты) с серверов, географически близких к пользователю, и снимает эту нагрузку с вашего сервера. Для магазина с большим числом изображений это заметно ускоряет загрузку и разгружает хостинг. Динамические персональные данные через CDN обычно не кэшируют, а вот статический контент и композитные страницы — да, при правильной настройке заголовков.

Что такое инвалидация кэша и почему это сложно?

Инвалидация — это сброс устаревшего кэша при изменении данных. Сложность в том, что кэш живёт на нескольких слоях (браузер, CDN, сервер), и при обновлении товара нужно согласованно обновить все слои. Если сбросить серверный кэш, но не сбросить CDN или браузерный, пользователь увидит старые данные. Поэтому стратегия инвалидации продумывается для каждого слоя: теги на сервере, версионирование статики, короткие TTL для динамики.

Как кэшировать цены и остатки, которые часто меняются?

Их выносят из кэшируемой части в динамическую область композита или обновляют через тегированный кэш, привязанный к обмену с 1С. Когда приходит новая цена или остаток, инвалидируется только связанный кэш. Часто меняющиеся данные либо не кэшируют вовсе (короткий TTL), либо кэшируют с точечной инвалидацией по событию. Главное — не запекать цену в долгоживущий кэш всей страницы.

Нужен ли service worker для интернет-магазина?

Service worker позволяет кэшировать ресурсы на стороне браузера программно и строить офлайн-сценарии, но для типового магазина это дополнительный слой сложности, который нужен не всем. Он оправдан, когда важны повторные визиты, мобильный опыт уровня приложения (PWA) и тонкий контроль над кэшем ресурсов. Для большинства проектов сначала выжимают эффект из HTTP-кэша, CDN и композита, а service worker добавляют осознанно.

Как версионировать статику, чтобы браузер брал свежую?

Через добавление версии в имя или параметр файла (например, style.css?v=20260108). Когда файл меняется, меняется и версия в ссылке, поэтому браузер считает это новым ресурсом и загружает его, а не берёт из кэша. Это позволяет ставить статике очень долгий срок жизни в браузере и при этом гарантированно обновлять её при изменениях. В 1С-Битрikс версионирование настраивается на уровне подключения ресурсов.

С чего начать построение стратегии кэширования?

С карты данных: разделите контент на статический (описания, изображения, категории), персональный (корзина, цена клиента) и часто меняющийся (остатки, акции). Для каждого типа выберите слой и срок кэширования. Затем настройте серверный кэш и композит, добавьте HTTP-заголовки и CDN для статики, продумайте инвалидацию по событиям обмена. Начинать с хаотичного включения кэша везде — путь к устаревшим данным.

Поделиться:

Хотите быстрый магазин без устаревших цен и чужих корзин?

Построим многослойное кэширование: серверный кэш, композит, CDN и согласованную инвалидацию по обмену с 1С. Рассчитаем работу по вашему проекту.

Редакция B2Bsite

Команда B2Bsite. С 2014 года разрабатываем и ускоряем интернет-магазины на 1С-Битрикс: многослойное кэширование, композит, CDN и производительность e-commerce под нагрузкой.

← Все статьи блога