Workbox предоставляет мощный инструмент для реализации сервис-воркеров, позволяя гибко управлять кешированием ресурсов и обработкой сетевых запросов. Основной концепцией является стратегия запроса, определяющая поведение сервис-воркера при обработке конкретного запроса. Стратегии позволяют балансировать между скоростью загрузки, свежестью данных и надежностью работы оффлайн.
1. Cache First Стратегия CacheFirst
проверяет наличие ресурса в кэше перед выполнением сетевого запроса.
Если ресурс найден в кэше, он возвращается немедленно; сетевой запрос
выполняется только при отсутствии кешированной версии.
Используется для:
Пример реализации:
import { registerRoute } from 'workbox-routing';
import { CacheFirst } from 'workbox-strategies';
import { CacheableResponsePlugin } from 'workbox-cacheable-response';
import { ExpirationPlugin } from 'workbox-expiration';
registerRoute(
({ request }) => request.destination === 'image',
new CacheFirst({
cacheName: 'images-cache',
plugins: [
new CacheableResponsePlugin({ statuses: [0, 200] }),
new ExpirationPlugin({ maxEntries: 50, maxAgeSeconds: 30 * 24 * 60 * 60 })
],
})
);
2. Network First Стратегия NetworkFirst
сначала пытается получить ресурс из сети. Если сетевой запрос не удался
(например, отсутствует соединение), используется кэш.
Применение:
import { NetworkFirst } from 'workbox-strategies';
registerRoute(
({ url }) => url.pathname.startsWith('/api/'),
new NetworkFirst({
cacheName: 'api-cache',
networkTimeoutSeconds: 5,
plugins: [
new ExpirationPlugin({ maxEntries: 30, maxAgeSeconds: 5 * 60 })
]
})
);
3. Stale While Revalidate Стратегия
StaleWhileRevalidate возвращает кэшированную версию ресурса
немедленно и параллельно обновляет её из сети. Это обеспечивает быстрый
ответ и одновременно поддерживает актуальность данных.
Применение:
import { StaleWhileRevalidate } from 'workbox-strategies';
registerRoute(
({ request }) => request.destination === 'script' || request.destination === 'style',
new StaleWhileRevalidate({
cacheName: 'static-resources',
})
);
4. Cache Only и Network Only Стратегии
CacheOnly и NetworkOnly обеспечивают строгое
использование одного источника.
CacheOnly — возвращает ресурс исключительно из кэша,
без сетевых запросов.NetworkOnly — всегда делает запрос к сети, игнорируя
кэш.Используются для:
Плагины Workbox позволяют добавлять дополнительное поведение к стратегиям:
Пример комплексной конфигурации стратегии:
import { NetworkFirst } from 'workbox-strategies';
import { ExpirationPlugin } from 'workbox-expiration';
import { CacheableResponsePlugin } from 'workbox-cacheable-response';
const apiStrategy = new NetworkFirst({
cacheName: 'dynamic-api',
networkTimeoutSeconds: 3,
plugins: [
new CacheableResponsePlugin({ statuses: [200] }),
new ExpirationPlugin({ maxEntries: 20, maxAgeSeconds: 300 })
]
});
Стратегии напрямую влияют на:
Разумная комбинация стратегий и плагинов Workbox позволяет построить сервис-воркеры, обеспечивающие эффективное кеширование, быстрый отклик и надежную работу приложений в любых условиях сети.