Cache First

Cache First — это один из стратегических подходов к кешированию в библиотеке Workbox для сервис-воркеров, который ориентирован на максимально быстрое предоставление ресурсов из локального кеша. При использовании этой стратегии запрос сначала проверяет кеш: если ресурс найден, он возвращается немедленно, и сетевой запрос не выполняется. Если ресурса в кеше нет, происходит сетевой запрос и последующее сохранение ответа в кеш для будущих обращений.

Настройка стратегии Cache First

Для работы с Cache First в Workbox необходимо использовать класс CacheFirst из модуля workbox-strategies. Простейший пример:

import { registerRoute } from 'workbox-routing';
import { CacheFirst } from 'workbox-strategies';
import { ExpirationPlugin } from 'workbox-expiration';

// Кеширование изображений
registerRoute(
  ({ request }) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'images-cache',
    plugins: [
      new ExpirationPlugin({
        maxEntries: 50, // Максимальное количество элементов в кеше
        maxAgeSeconds: 7 * 24 * 60 * 60, // Время жизни кеша — 7 дней
      }),
    ],
  })
);

Ключевые моменты:

  • cacheName позволяет задать имя кеша, что облегчает его управление.
  • ExpirationPlugin управляет временем хранения и количеством элементов.
  • request.destination фильтрует типы ресурсов, например 'image', 'script' или 'document'.

Преимущества стратегии Cache First

  1. Скорость загрузки: ресурсы возвращаются из локального кеша без сетевого запроса.
  2. Снижение нагрузки на сервер: уменьшение количества обращений к сети особенно важно для медленных соединений.
  3. Подходит для статического контента: изображения, шрифты, CSS и JavaScript, которые редко меняются.

Ограничения Cache First

  • Не подходит для динамического контента, где важны свежие данные.
  • Возможны ситуации, когда пользователь получит устаревший контент, если кеш не обновляется регулярно.
  • Требует контроля размера кеша и времени жизни элементов, чтобы не переполнить хранилище браузера.

Плагины для расширения функционала

Workbox предоставляет набор плагинов, которые позволяют гибко управлять стратегией Cache First:

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

Пример с дополнительной фильтрацией ответов:

import { CacheableResponsePlugin } from 'workbox-cacheable-response';

new CacheFirst({
  cacheName: 'api-cache',
  plugins: [
    new CacheableResponsePlugin({
      statuses: [0, 200], // Кешируются только успешные ответы
    }),
    new ExpirationPlugin({
      maxEntries: 100,
      maxAgeSeconds: 24 * 60 * 60,
    }),
  ],
});

Особенности работы с разными типами запросов

  • Изображения и шрифты — идеальный вариант для Cache First, так как они редко меняются и критичны для скорости отображения интерфейса.
  • JS и CSS — статические бандлы можно кешировать Cache First с строгой политикой обновления через versioning или hash в имени файла.
  • HTML и API-запросы — использование Cache First требует осторожности, лучше комбинировать с StaleWhileRevalidate или использовать кеширование только для определённых эндпоинтов, где данные редко меняются.

Взаимодействие с другими стратегиями

Cache First можно комбинировать с другими стратегиями для оптимизации производительности:

  • StaleWhileRevalidate — позволяет отдать старый кеш, одновременно обновив его в фоне.
  • NetworkFirst — приоритет сети, но кеш используется как резерв.
  • Гибридные подходы позволяют создавать эффективные схемы кеширования для больших приложений.

Практические рекомендации

  • Всегда контролировать размер кеша с помощью ExpirationPlugin.
  • Разделять кеши по типу ресурсов (images-cache, css-cache, api-cache) для удобного управления.
  • Использовать хеширование имен файлов для JavaScript и CSS, чтобы новые версии автоматически заменяли старые.
  • Для приложений PWA стратегия Cache First является основой оффлайн-доступа, особенно для медиа и интерфейсных ресурсов.

Cache First в Workbox — это мощный инструмент для ускорения загрузки и уменьшения сетевой нагрузки, при этом требующий внимательного контроля кеша и продуманного сочетания с другими стратегиями для динамического контента.