Service Worker обеспечивает поддержку offline-first
приложений, управление кэшированием и фоновыми задачами,
интегрируется с Angular через пакет
@angular/service-worker.
ng add @angular/pwa
Эта команда автоматически:
@angular/service-worker в проект.ngsw-config.json.angular.json.import { ServiceWorkerModule } from '@angular/service-worker';
import { environment } from '../environments/environment';
@NgModule({
imports: [
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production,
registrationStrategy: 'registerWhenStable:30000'
})
]
})
export class AppModule {}
enabled активирует SW только в production-сборках.registrationStrategy задаёт стратегию регистрации:
задержка, после стабильности приложения или сразу при старте.Файл ngsw-config.json содержит правила кэширования:
assetGroups — определяют статические ресурсы приложения.
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": ["/favicon.ico", "/index.html", "/*.css", "/*.js"]
}
}dataGroups — настраивают кэширование API-запросов.
{
"name": "api-cache",
"urls": ["/api/**"],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 100,
"maxAge": "1h",
"timeout": "10s"
}
}Service Worker автоматически проверяет новые версии приложения. Для
принудительного обновления можно использовать сервис
SwUpdate:
import { SwUpdate } from '@angular/service-worker';
constructor(private swUpdate: SwUpdate) {
if (this.swUpdate.isEnabled) {
this.swUpdate.available.subscribe(() => {
this.swUpdate.activateUpdate().then(() => document.location.reload());
});
}
}
installMode: 'prefetch').freshness с
ограничением времени жизни кэша, чтобы пользователи всегда получали
актуальные данные.