Сервис-воркер — это скрипт, который браузер запускает в фоновом режиме отдельно от веб-страницы. Его ключевая функция заключается в управлении сетевыми запросами и кэшированием ресурсов, что позволяет создавать прогрессивные веб-приложения (PWA) с высокой производительностью и устойчивостью к нестабильному соединению.
Основные возможности сервис-воркеров включают:
Workbox — это библиотека от Google, созданная для упрощения создания и управления сервис-воркерами. Она предоставляет высокоуровневый API для настройки кэширования и обработки сетевых запросов, избавляя от необходимости писать сложные низкоуровневые обработчики.
workbox-core Обеспечивает базовые функции: регистрацию сервис-воркера, управление версиями кэша, настройку стратегий обновления. Ключевые методы:
skipWaiting() — позволяет немедленно активировать новый
сервис-воркер.clientsClaim() — обеспечивает контроль сервис-воркера
над всеми клиентами сразу после активации.workbox-precaching Предназначен для предварительного кэширования ресурсов во время установки сервис-воркера. Основная задача — гарантировать доступность критически важных ресурсов без сетевого запроса. Пример использования:
import { precacheAndRoute } from 'workbox-precaching';
precacheAndRoute([
{ url: '/index.html', revision: '1234' },
{ url: '/styles/main.css', revision: '1234' }
]);workbox-routing Позволяет определять маршруты и стратегии обработки сетевых запросов. Поддерживаются такие стратегии, как:
Пример маршрутизации:
import { registerRoute } from 'workbox-routing';
import { CacheFirst } from 'workbox-strategies';
registerRoute(
({ request }) => request.destination === 'image',
new CacheFirst({
cacheName: 'images-cache',
plugins: [
new ExpirationPlugin({ maxEntries: 50, maxAgeSeconds: 7 * 24 * 60 * 60 })
]
})
);workbox-strategies Обеспечивает готовые стратегии кэширования. Каждая стратегия подходит для разных типов ресурсов.
CacheFirst — подходит для статических ресурсов
(картинки, шрифты).NetworkFirst — подходит для динамического контента
(API-запросы).StaleWhileRevalidate — оптимальный выбор для контента,
который нужно быстро показывать, но регулярно обновлять.workbox-background-sync Реализует фоновую синхронизацию запросов при временной недоступности сети. Применяется для отправки данных форм, сообщений или других операций, которые должны завершиться при восстановлении соединения.
workbox-expiration Плагин для автоматического
удаления устаревших ресурсов из кэша. Поддерживает параметры:
maxEntries (максимальное количество элементов) и
maxAgeSeconds (время жизни ресурса в секундах).
CacheFirst Идеально для файлов, которые редко изменяются: CSS, JS, шрифты, изображения. Позволяет минимизировать сетевые запросы.
NetworkFirst Используется для динамического контента, например, данных API. Гарантирует актуальность данных, сохраняя резерв в кэше на случай отсутствия сети.
StaleWhileRevalidate Предоставляет пользователю быстрый доступ к старой версии ресурса, одновременно обновляя кэш. Эффективно для страниц с постоянно обновляющимся контентом.
Установка Workbox через npm:
npm install workbox-cli --globalСоздание сервис-воркера с precaching:
import { precacheAndRoute } from 'workbox-precaching';
precacheAndRoute(self.__WB_MANIFEST);Настройка стратегий для статических и динамических ресурсов:
import { registerRoute } from 'workbox-routing';
import { CacheFirst, NetworkFirst } from 'workbox-strategies';
registerRoute(
({ request }) => request.destination === 'script',
new CacheFirst()
);
registerRoute(
({ url }) => url.pathname.startsWith('/api/'),
new NetworkFirst()
);Активация сервис-воркера и управление версиями:
import { clientsClaim } from 'workbox-core';
self.skipWaiting();
clientsClaim();Workbox превращает сложную задачу управления сервис-воркером в структурированный процесс, позволяя одновременно ускорить загрузку приложения и повысить его надежность в оффлайн-режиме.