当前位置: 首页 > Web前端 > JavaScript

AngularSSR和PWA结合使用时观察到的一些现象

时间:2023-03-27 15:30:34 JavaScript

观察到的现象部署SSR服务器,浏览器发起请求,请求10次,发现只有第一个请求被SSR服务器处理。其他9个请求没有落在SSR服务器上。结论第一页访问由源站(SSR/CDN)渲染。然后-由于PWA功能(或更准确地说:ServiceWorker),所有主要资产(如shellindex.html、javascript文件等)都由浏览器中的ServiceWorker缓存。因此,对于后续的页面访问(刷新),请求在浏览器中被ServiceWorker拦截并立即返回,而不会离开浏览器。这就是为什么我们在接下来的9个页面访问中看不到任何流量。ServiceWorkers非常适合改善Web应用程序的用户体验,因为它们可以加快页面加载速度。但是对于开发者来说,ServiceWorker有时会给开发者调试带来麻烦。有时我们可能需要手动卸载在第一次访问页面时安装的ServiceWorker。例如,当我们有意想在重新加载页面时访问源服务器(SSR)。以下是从站点卸载ServiceWorker的方法:打开ChromeDevTools->顶部选项卡[Applications]->左侧菜单[Storage]->在右侧面板中单击按钮[ClearSiteData]BTW。在单击[清除站点数据]之前,请确保选中下面的复选框:另一个选项是在浏览器中禁用Javascript。这样就不会发生CSR,也不会发生ServiceWorker注册。然后刷新页面后,一直会命中SSR服务器。ngsw-worker.js是AngularServiceWorker的核心文件,用于实现离线缓存、预缓存、动态更新、推送通知等功能。具体而言,ngsw-worker.js主要有以下功能:离线缓存:使用CacheStorageAPI将应用资源缓存到客户端。当应用程序处于离线状态时,可以从缓存中加载资源以供离线访问。预缓存:在应用首次加载时,将应用所需的所有资源缓存到客户端,以提高应用的性能和速度。动态更新:当应用程序在后台更新时,使用ServiceWorkerRegistration.update()方法获取更新的资源并将它们缓存到客户端。当用户重新访问应用程序时,新的资源被用来替换旧的。推送通知:使用推送API和通知API向客户端发送推送通知。通过使用ngsw-worker.js,可以将Angular应用程序转换为渐进式Web应用程序(PWA),从而提高应用程序的性能、速度和可用性。浏览器会在用户第一次访问应用时下载并缓存ngsw-worker.js文件,并在后续访问时使用缓存的数据来提高性能和速度。