Workbox — это библиотека JavaScript для упрощения создания сервис-воркеров и кэширования ресурсов в веб-приложениях. В сочетании с Angular Service Worker она обеспечивает эффективное управление кэшированием, оффлайн-доступом и стратегиями обновления приложений.
Angular по умолчанию поддерживает сервис-воркеры через пакет
@angular/service-worker. Для расширенной функциональности и
тонкой настройки кэширования используется Workbox. Основные шаги
интеграции:
npm install workbox-build workbox-webpack-plugin --save-dev
angular.json для добавления сервис-воркера в
процесс сборки:"serviceWorker": true,
"ngswConfigPath": "ngsw-config.json"
workbox-config.js:module.exports = {
globDirectory: 'dist/',
globPatterns: [
'**/*.{html,js,css,png,jpg,svg,json}'
],
swDest: 'dist/sw.js',
runtimeCaching: [
{
urlPattern: /\.(?:png|jpg|jpeg|svg)$/,
handler: 'CacheFirst',
options: {
cacheName: 'images-cache',
expiration: {
maxEntries: 50,
maxAgeSeconds: 30 * 24 * 60 * 60
}
}
},
{
urlPattern: /\/api\/.*\/*.json/,
handler: 'NetworkFirst',
options: {
cacheName: 'api-cache',
networkTimeoutSeconds: 5
}
}
]
};
Workbox предоставляет несколько стратегий кэширования, каждая из которых подходит для определенных сценариев:
Angular Service Worker хранит конфигурацию в файле
ngsw-config.json. Для работы с Workbox важно учитывать:
Пример ngsw-config.json с расширенной интеграцией
Workbox:
{
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": ["/favicon.ico", "/index.html", "/*.css", "/*.js"]
}
},
{
"name": "images",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": ["/assets/images/**"]
}
}
],
"dataGroups": [
{
"name": "api",
"urls": ["/api/**"],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 100,
"maxAge": "6h",
"timeout": "10s"
}
}
]
}
Пример использования Background Sync для отправки данных оффлайн:
import { BackgroundSyncPlugin } from 'workbox-background-sync';
import { registerRoute } from 'workbox-routing';
import { NetworkOnly } from 'workbox-strategies';
const bgSyncPlugin = new BackgroundSyncPlugin('form-queue', {
maxRetentionTime: 24 * 60
});
registerRoute(
/\/api\/submit/,
new NetworkOnly({
plugins: [bgSyncPlugin]
}),
'POST'
);
ng build --prod и
http-server для проверки работы оффлайн.CacheFirst для статических ресурсов и
NetworkFirst для API.Workbox вместе с Angular Service Worker обеспечивает гибкий и надежный механизм управления ресурсами, повышая производительность и устойчивость приложений к сбоям сети.