Service Worker — это скрипт, который браузер запускает в отдельном фоновом потоке, независимо от веб-страницы. Это ключевая технология для создания Progressive Web Apps (PWA).
Основные возможности:
// ngsw-config.json - конфигурация кэширования
{
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": ["/*.css", "/*.js"]
}
}
]
}
Жизненный цикл Service Worker:
navigator.serviceWorker.register()
)PWA — это веб-приложения, которые используют современные API (включая Service Workers) для предоставления нативного пользовательского опыта.
Ключевые характеристики PWA:
ng add @angular/pwa --project your-project-name
Эта команда добавляет:
ngsw-worker.js
(Service Worker)manifest.webmanifest
(конфигурация PWA)angular.json
и index.html
// app.module.ts
import { ServiceWorkerModule } from '@angular/service-worker';
@NgModule({
imports: [
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production,
registrationStrategy: 'registerWhenStable:30000'
})
]
})
{
"appData": {
"version": "1.0.0"
},
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"updateMode": "prefetch",
"resources": {
"files": ["/favicon.ico", "/*.css", "/*.js"]
}
}
],
"dataGroups": [
{
"name": "api",
"urls": ["/api/**"],
"cacheConfig": {
"maxSize": 100,
"maxAge": "3d",
"strategy": "freshness"
}
}
]
}
// app.component.ts
constructor(private updates: SwUpdate) {
updates.versionUpdates.subscribe(evt => {
if (evt.type === 'VERSION_READY') {
if (confirm('Доступна новая версия. Обновить?')) {
document.location.reload();
}
}
});
}
Стратегии кэширования:
freshness
: Для часто меняющихся данных (API)performance
: Для статических ресурсовОффлайн-страница:
{
"navigationUrls": [
{"positive": true, "regex": "^\\/.*$"},
{"positive": false, "regex": "^\\/(?:auth|admin)\\/.*$"}
]
}
"cacheConfig": {
"maxSize": 20,
"maxAge": "1h"
}
Service Worker — это:
PWA — это:
В Angular:
@angular/pwa
для быстрого стартаngsw-config.json
под свои нуждыSwUpdate
Для успешного PWA:
Средний прирост производительности после правильной реализации PWA — 40-60% по данным Lighthouse.