Service Worker
Service Worker 是 PWA 中重要的一部分,它是一个网站安插在用户浏览器中的大脑。
Workbox 3是PWA 相关的工具集合,其实围绕它的还有一些列工具,如 workbox-cli、gulp-workbox、webpack-workbox-plagin 等等
使用 Service Worker的话,传输协议必须为 HTTPS。因为 Service Worker 中涉及到请求拦截,所以必须使用 HTTPS 协议来保障安全。Service Worker 的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。
1. workbox3 的缓存策略
- Stale-While-Revalidate 使用缓存时校验缓存是否过期

- Cache First 缓存优先

- Network First 网络优先

- Network Only 只使用网络

- Cache Only 只使用缓存

2. 其他
HTML,如果你想让页面离线可以访问,使用 NetworkFirst,如果不需要离线访问,使用 NetworkOnly,其他策略均不建议对 HTML 使用。
CSS 和 JS,情况比较复杂,因为一般站点的 CSS,JS 都在 CDN 上,SW 并没有办法判断从 CDN 上请求下来的资源是否正确(HTTP 200),如果缓存了失败的结果,问题就大了。这种我建议使用 Stale-While-Revalidate 策略,既保证了页面速度,即便失败,用户刷新一下就更新了。
如果你的 CSS,JS 与站点在同一个域下,并且文件名中带了 Hash 版本号,那可以直接使用 Cache First 策略。
图片建议使用 Cache First,并设置一定的失效事件,请求一次就不会再变动了。
对于不在同一域下的任何资源,绝对不能使用 Cache only 和 Cache first。
3. 移除service worker
说道移除 SW,第一反应可能是删掉 SW.js。注意,直接这么做会导致你的网站永远无法更新,即便服务器上文件有更新。原因是因为 SW 已经缓存了所有的资源,而浏览器更新资源依靠 SW.js 里面的缓存策略。直接删除 SW.js 文件相当于删除了管理缓存的中间人,那么浏览器只会一直从已有的缓存中拿取资源。
相关资料
移除已经开始上线使用的 Service Worker - 掘金