从5.0.0版开始,Angular附带了一个ServiceWorker实现。Angular开发人员可以利用这个服务工作者,并从它提供的更高的可靠性和性能中受益,而无需针对低级API编写代码。这个实现就是SAP电商云SpartacusUIpackage.json中提到的依赖@angular/pwa:Angular的ServiceWorker旨在优化终端用户在慢速或不可靠网络连接上使用应用程序的体验,同时最大限度地降低风险提供过时的内容。为此,AngularServiceWorker遵循以下准则:缓存应用程序就像安装本机应用程序。应用程序作为一个单元缓存,所有文件一起更新。正在运行的应用程序继续运行所有文件的相同版本。它不会突然开始接收来自可能不兼容的较新版本的缓存文件。当用户刷新应用程序时,他们会看到最新的完全缓存版本。新选项卡加载最新的缓存代码。更新在后台发生,在更改发布后相对较快。提供应用程序的先前版本,直到它被安装并准备好更新。服务工作者尽可能节省带宽。资源只有在发生变化时才会下载。为了支持这些行为,AngularServiceWorker从服务器加载清单文件。该文件名为ngsw.json,描述了要缓存的资源并包含每个文件内容的哈希值。部署应用程序更新时,清单的内容会发生变化,通知服务工作者应下载并缓存新版本的应用程序。此清单是从CLI生成的名为ngsw-config.json的配置文件生成的。Spartacus的ngsw-config.json文件的内容如下:{"index":"/index.html","assetGroups":[{"name":"app","installMode":"prefetch","resources":{“文件”:[“/favicon.ico”,“/index.html”,“/*.css”,“/*.js”,“/manifest.webmanifest”]}}],“数据组”:[{"name":"basesites","urls":["*/basesites?fields=baseSites\\(uid,defaultLanguage\\(isocode\\),urlEncodingAttributes,urlPatterns,stores\\(currencies\\(isocode\\),defaultCurrency\\(isocode\\),languages\\(isocode\\),defaultLanguage\\(isocode\\)\\),theme,defaultPreviewCatalogId,defaultPreviewCategoryCode,defaultPreviewProductCode\\)*"],"cacheConfig":{“最大尺寸”:1,"maxAge":"1d","strategy":"performance"}}]}安装AngularServiceWorker就像包含一个NgModule一样简单注入,这些服务与ServiceWorker交互,可用于控制它。例如,应用程序可能会要求在有新更新可用时收到通知,或者应用程序可能会要求ServiceWorker检查服务器是否有可用更新。
