GenerateSW — это один из режимов библиотеки Workbox,
используемый для автоматической генерации сервис-воркера. Его ключевая
особенность заключается в том, что разработчику не требуется писать весь
код сервис-воркера вручную. Workbox анализирует содержимое проекта,
строит список ресурсов для кэширования и создает готовый сервис-воркер с
оптимальными стратегиями кэширования.
При использовании GenerateSW Webpack плагин
автоматически:
swDest);install, activate и
fetch с базовыми обработчиками кэша.Для подключения GenerateSW в проект с Webpack необходимо
установить пакет workbox-webpack-plugin:
npm install workbox-webpack-plugin --save-dev
В файле конфигурации Webpack добавляется плагин:
const { GenerateSW } = require('workbox-webpack-plugin');
module.exports = {
// остальная конфигурация Webpack
plugins: [
new GenerateSW({
swDest: 'service-worker.js',
clientsClaim: true,
skipWaiting: true,
maximumFileSizeToCacheInBytes: 5 * 1024 * 1024, // 5 MB
runtimeCaching: [
{
urlPattern: /\.(?:png|jpg|jpeg|svg|gif)$/,
handler: 'CacheFirst',
options: {
cacheName: 'images-cache',
expiration: {
maxEntries: 60,
maxAgeSeconds: 30 * 24 * 60 * 60, // 30 дней
},
},
},
{
urlPattern: /^https:\/\/api\.example\.com\/data/,
handler: 'NetworkFirst',
options: {
cacheName: 'api-cache',
networkTimeoutSeconds: 10,
expiration: {
maxEntries: 50,
maxAgeSeconds: 5 * 60, // 5 минут
},
},
},
],
}),
],
};
Каждое правило в runtimeCaching включает:
urlPattern — регулярное выражение или функция для
сопоставления URL.handler — стратегия кэширования:
CacheFirst, NetworkFirst,
StaleWhileRevalidate, NetworkOnly,
CacheOnly.options — объект с дополнительными настройками, включая
имя кэша, политику истечения (expiration), заголовки и
др.CacheFirst Первоначально сервис-воркер ищет ресурс в кэше. Если его нет — идет запрос в сеть. Используется для статических файлов и изображений.
NetworkFirst Сначала сервис-воркер обращается к сети, при этом кэшируется полученный ответ. При отсутствии сети возвращается кэш. Подходит для динамических данных, API-запросов.
StaleWhileRevalidate Возвращает кэшированную версию сразу, а затем обновляет кэш в фоне из сети. Оптимально для быстрого рендера страниц при обновлении контента.
GenerateSW автоматически добавляет хеши к файлам при
сборке, что позволяет:
Сервис-воркер, сгенерированный через GenerateSW,
содержит готовые обработчики:
install — кэширование предопределенных ресурсов;activate — удаление старых кэшей и активация нового
сервис-воркера;fetch — перехват запросов и применение стратегий
кэширования.Для активации сервис-воркера в приложении достаточно зарегистрировать его в основном скрипте:
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => console.log('SW зарегистрирован:', registration))
.catch(error => console.error('Ошибка регистрации SW:', error));
});
}
Благодаря настройкам clientsClaim и
skipWaiting, новая версия сервис-воркера берет управление
страницами без необходимости перезагрузки.
GenerateSW — оптимальное решение для проектов, где требуется надежный и гибкий сервис-воркер без написания большого объема ручного кода. Он обеспечивает современный подход к кэшированию, ускоряет загрузку страниц и упрощает поддержку offline-функциональности.