Angular предоставляет встроенную поддержку Service
Workers, позволяющую создавать Progressive Web Apps (PWA) с
оффлайн-режимом и эффективным кешированием ресурсов. Для этого
используется пакет @angular/service-worker.
Service Worker подключается через ng add @angular/pwa. В
проект добавляется файл ngsw-config.json, в котором
задаются правила кеширования:
{
"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/**"
]
}
}
]
}
Angular Service Worker поддерживает две ключевые стратегии:
Пример кеширования динамических API-запросов:
{
"dataGroups": [
{
"name": "api-data",
"urls": [ "/api/**" ],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 100,
"maxAge": "1h",
"timeout": "10s"
}
}
]
}
Angular 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());
});
}
}
Это обеспечивает автоматическую загрузку новой версии приложения без необходимости ручного обновления пользователем. Сочетание Service Workers и эффективного кеширования повышает производительность, снижает задержки и делает приложение доступным оффлайн.