提问
历史背景
有很多文章把pwa技术和小程序技术放在一起比较。谷歌浏览器至于pwa,微信至于小程序,都是给网页应用提供了离线缓存静态资源文件的功能,动静分离,native的接口,这些都是给网页应用提供更优质的加载性能。但是小程序并没有BOM和DOM,意味着它对浏览器有着更深入的改造,它并非纯正意义上的网页应用,是对所有Web开发资源的一种限制。
相反,pwa则不一样。
安卓的支持
浏览器的兼容性重点的重点当然是微信浏览器对pwa的支持情况,我们可以看到除了推送信息和支付接口之外基本已经实现支持(支付接口的支持应该是出于安全的考虑,以及和weixin-js-sdk重叠的原因,X5浏览器支持它只是时间的问题)。如今我们更关心的是关于SW-cache这一部分,换句话说,我们可以放心在安卓微信上使用SW-cache的技术。
安卓微信浏览器的支持情况ios(苹果)的支持
苹果safari已开始支持service workersw-precache 和 workbox
它们之间的区别如下,可以说非常相似:
中文说明 | workbox | 中文说明 | sw-precache |
---|---|---|---|
缓存的目录 | globDirectory | 缓存前缀 | stripPrefix |
缓存的静态文件类型 | globPatterns | 缓存的静态文件类型 | staticFileGlobs |
sw文件路径 | swDest | sw文件名 | filename |
让sw立即接管网页 | clientsClaim | (相同) | clientsClaim |
激活的等待 | skipWaiting | (相同) | skipWaiting |
动态请求 | runtimeCaching | (相同) | runtimeCaching |
workbox中已经支持很多方面的内容,当然,还有很多内容有待开发。
缓存机制
- networkFirst
- cacheFirst
- fastest
- cacheOnly
- networkOnly
networkFirst是显示完成后,SW优先和后端通讯,看接口是否更新,下一次刷新则是采用最新数据内容。cacheFirst则是优先考虑缓存,如果缓存没有命中,才会去请求接口拿新数据,这个选型适合那种不经常更改的内容或者有别的更新机制。fastest则是两个同时进行,哪个快执行哪个。cacheOnly和networkOnly比较不常用。