Кеширование и офлайн

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

Работу с кешем выполняет Service Worker — служебный файл, который PWA создаёт для каждой витрины. Вам нужно лишь выбрать стратегию для каждого типа файлов.

Что PWA не обещает. Ускорение в процентах, полную работу корзины и оформления заказа без сети, мгновенное обновление картинки, заменённой под тем же адресом. Страницы аккаунта, корзины и оформления заказа PWA не кеширует намеренно, чтобы личные данные не попали в кеш.

Стратегии кеширования простыми словами

Где открыть. Меню → Кеширование → Кеширование.

Стратегия Как работает Когда выбирать
Сначала сеть (Network first) Сначала запрос к серверу; если сети нет — берётся кеш Страницы магазина: покупатель видит свежие цены и остатки
Сначала кеш (Cache first) Если файл в кеше — берётся он; нет — запрос по сети Файлы, которые не меняются или меняют адрес вместе с изменением (шрифты)
Stale-while-revalidate Сразу показывается файл из кеша, а в фоне загружается новая версия для следующего раза Изображения и статические файлы (стили, скрипты)
Только сеть (Network only) Всегда сеть, без офлайн-копии Когда офлайн-копия не нужна
Только кеш (Cache only) Только кеш Для изображений не используйте: кеш не заполняется, и картинки не загружаются совсем
«—» Не вмешиваться: решает обычный кеш браузера Когда кеш PWA для этого типа не нужен

Страница «Кеширование» со стратегиями и рекомендованными значениями

Рис. 5.1. Страница «Кеширование» на тестовом стенде: рядом с каждым полем показана рекомендуемая стратегия.

Настройка кеширования

Когда это нужно. Установить разумные правила или поправить их после мастера.

Где открыть. Меню → Кеширование → Кеширование.

Что выбрать.

Поле Рекомендация Почему
Страницы Сначала сеть Свежие цены и остатки; кеш выручает только без сети
Изображения Stale-while-revalidate Картинки появляются быстро и обновляются в фоне
Статические ресурсы (css, js, worker) Stale-while-revalidate Стили и скрипты быстро, и обновляются
Google шрифты Сначала кеш Шрифты почти не меняются
Медиа (видео, аудио) Оставьте пустым, если не уверены (рядом с полем в интерфейсе написана рекомендация «Сначала кеш», но для новых установок поле пустое) Большие файлы лучше не кешировать без необходимости

Затем нажмите «Сохранить». Рядом с полем может появиться подсказка «Рекомендуемая стратегия: …». Если у изображений выбрано «Только кеш», появится кнопка «Переключить на Stale-while-revalidate» — нажмите её и сохраните.

Что должно получиться. Настройки сохранены. На странице «Диагностика» проверка «Кеширование» — «Пройдено» или «Предупреждение» с понятной причиной (глава 7).

Если не получилось или картинки «залипли».

  • Сначала кеш для изображений: картинка, заменённая под тем же адресом, может оставаться старой у покупателей до 30 дней. Выбирайте «Сначала кеш» для изображений, только если новое изображение получает новый адрес (версия или хеш в адресе). Иначе — Stale-while-revalidate.
  • Даже при Stale-while-revalidate покупатель может один раз увидеть старую версию, потом получит новую.
  • Картинки на внешних сервисах (CDN, S3) без специальных заголовков PWA не кеширует: свежесть определяет сам сервис; офлайн их не будет.
  • Картинки WebP/AVIF кешируются для офлайна, только если сервер отдаёт для них заголовок Cache-Control: public — это настройка веб-сервера, о которой лучше спросить хостинг или разработчика.
  • Собственный Service Worker модуля SuperCache (опция «Enable caching Server worker») конфликтует с PWA за одну область: отключите эту опцию там, где работает PWA.

Предварительное кеширование

Что это. Часть сайта (например, шапка, меню) загружается в кеш при установке Service Worker и показывается сразу, а динамическое содержимое подгружается с сервера. Это продвинутый режим («островная архитектура»): он требует подготовки сайта и при неверной настройке может нарушить вёрстку. Если вы не разработчик, оставьте его выключенным.

Где открыть. Меню → Кеширование → Предварительное кеширование.

Как включить осознанно.

  1. Нажмите «Добавить компонент». Новый компонент отключён.
  2. Заполните: тип «Файл» (ссылка на файл) или «Блок» (ID блока из Сайт → Блоки), название, версия.
  3. Нажмите «Активировать компонент».
  4. Нажмите «Сохранить». Предкеш включён, пока активен хотя бы один компонент «Файл» или «Блок».

Компонент «Динамический контент (загрузка с сервера)» не кешируется: он нужен для островного режима. Если вы изменили компонент, поменяйте его версию, чтобы покупатели получили новое.

Что должно получиться. В плашке вверху страницы настроек: Предварительное кеширование: Включено.

Если не получилось.

  • Подсказки в карточке компонента: «Отключён: компонент не активирован», «Не работает: укажите ID блока / ссылку на файл», «Активен: попадёт в precache после сохранения».
  • Блок кешируется, только если сервер отдаёт для него Cache-Control: public — это настройка сервера, не приложения.
  • Если вёрстка «поехала» после включения — отключите компонент и сохраните.

Обновление кеша у покупателей

Когда это нужно. Вы изменили сайт или PWA, и нужно, чтобы покупатели получили новую версию.

Где открыть. Меню → Кеширование → Обновления кеша.

Как это работает. Когда Service Worker изменяется, в браузере покупателя появляется небольшое уведомление (тост) с предложением обновить приложение. Приложение само отслеживает изменения файла Service Worker. Если по какой-то причине этого не произошло, укажите новое значение в поле «Версия» (номер версии файла Service Worker) и сохраните: у покупателей появится предложение обновить.

На странице можно также настроить вид тоста: цвета, размер шрифта, положение (углы, центр) и отступ от края, а также свой CSS.

Обновление Service Worker не очищает кеш изображений у покупателей. Кеш хранит до 50 картинок не дольше 30 дней. PWA не очищает память браузера покупателей принудительно.

Офлайн-страница («Резервный ответ»)

Когда это нужно. Показать покупателю понятный текст и бренд, когда нет сети и нужной страницы нет в кеше.

Где открыть. Меню → Разное → Резервный ответ.

Что заполнить.

  1. Изображение — необязательно.
  2. Текст — что видит покупатель; можно HTML. Например: «Нет подключения к интернету. Страница станет доступна, когда сеть вернётся.»
  3. Необязательно: Ссылка на шрифт, Пользовательский CSS.
  4. Нажмите «Сохранить».

Офлайн-страница с заданным текстом

Рис. 5.2. Результат на тестовом стенде при отсутствии сети: настроенный текст вместо ошибки браузера.

Что должно получиться. Сначала один раз откройте витрину в браузере, чтобы установился Service Worker. Затем в инструментах разработчика браузера (вкладка Network) включите режим «Offline» и откройте страницу витрины, которую вы раньше не открывали: покажется ваша офлайн-страница.

Если не получилось.

  • Размер. Страница встраивается в Service Worker, если она не больше 64 КиБ. Держите её компактной; картинки и шрифты подключайте отдельными файлами.
  • Если страница слишком большая или не настроена, покупатель увидит стандартную заглушку «Offline».
  • Корзина, оформление заказа и личный кабинет без сети офлайн-страницу показывают, но их содержимого офлайн нет — так и задумано.
  • При режиме «островной архитектуры» (предварительное кеширование с компонентами «Блок» или «Динамический контент») на страницах корзины и оформления заказа без сети вместо вашей страницы показывается обычная ошибка браузера.
  • Проверка «Offline-страница» на странице «Диагностика» (глава 7) подскажет, что не так.

Что проверено. Показ офлайн-страницы с настроенным текстом проверялся на тестовом стенде в Chrome на компьютере; на настоящих телефонах и в Safari не проверялось.

Просмотр изображения
Оригинал