发展历史
-
Google Gears
-
AppCache
-
在线后依旧从cache读取资源
-
非缓存资源不会在缓存的页面上加载
-
配置文件改变时才会更新缓存
-
没有api去修改配置,触发更新
- Service Worker
-
Service Worker 是一种 Web Worker
-
意在提供更加灵活的 Cache API
生命周期
-
install
-
wating
-
active
更新机制
-
重新加载
-
24小时未关闭自动更新
-
手动激活更新,等待旧的Service Worker失效后激活
-
强制直接更新
API
-
register
-
scope (控制多个标签页,跨标签页通讯)
-
update
-
cache(对本地缓存的增,查,删)
生产环境中健壮的Service Worker
-
合理的注册时机(避免浏览器首次加载时的卡顿)
-
合理的缓存策略(懒加载)
-
清理、迁移旧缓存
响应模式
-
缓存优先,回退到网络
-
网络优先,回退到缓存(缺点:网络很慢时响应很慢)
-
返回缓存,然后更新缓存
工程实践
-
兼容性(暂不支持safari 和 安卓原生webview)
-
dev tool(浏览器控制台中有Service Workers选项)
-
URL(sw.js要保持URL不变,保持资源以来的死循环)
-
自动化构建
-
webpack 插件(资源分为三种,重要,附加,选项)
-
sw-precache(不支持runtime,不支持cdn)
实际项目中的更新流程
-
更新Service Worker
-
支持增量更新
-
错误监控(在sw中上报错误)
-
降级方案
-
直接销毁
-
配置文件化
-
开关接口(饿了么采用此种方式)
作用
-
加快加载速度
-
http上报
-
合并同步后台数据,多个页面公用一个sw
-
区分环境(开发,测试,生产)
-
express/Koa
-
pwa
你为什么需要SW?
-
加载速度更快
-
离线能力
-
完全的缓存控制能力
-
渐进式增强,无痛迁移
如今大多数web 应用的开发模式
-
桌面端:纯web的能力已经足够
-
移动端:
-
hybrid
-
react native
-
weex
-
微信小程序
-
Progressive Web App(增强性web应用,有添加到桌面的能力)
架构上的演变
概念- 核心技术-理念
ajax-xhr-async-first
pwa-sw-offine-first
以上笔记整理自2017年11月深圳FCC线下活动腾讯小哥张嘉伟所做的分享,边听边整理,难免有错漏的地方,如有发现欢迎及时告知修改。
以下是本人的一点粗浅总结。
个人总结
- PWA( Progressive Web App)
- 定义:
PWA是一套渐进增强的web解决方案。用来提高web离线,交互,推送等能力,获得与native app匹敌的用户体验。与此同时又能保持web的开放性和拓展性。- 具体技术:
PWA 具体技术包括 Service worker、 Web App Manifest、 Cache API、 Fetch API、 Push API、 Web Push Protocol、 Notification 等等。
- Service Worker
- 定义:
Service Worker 是一种 Web Worker(Web Worker 是HTML5标准的一部分,这一规范定义了一套API,它允许一段JavaScript程序运行在主线程之外的另外一个线程中。),是事件驱动的后台进程。- 作用:
Service Worker 意在提供更加灵活的 Cache API,也就是提高web的离线能力- 历史发展:
google Gears=> app Cache => server Worker- 兼容性:
暂不兼容sarafi和安卓原生webview- 生命周期,更新机制,响应模式,API,工程实践等参照上文
- 未来展望
- PWA是一项较新的技术,可以提供更好的web用户体验,有开放的web标准和文档,存在浏览器兼容不完美,门槛较高等缺点。
- PWA代表了一个技术方向,最终结果如何只能让时间来揭晓答案。所以持观望态度。如果业务中遇到了非常符合的场景,比如只需要在安卓机器中运行,又要求较好的用户体验,又不想开发native app的情况下,也可以考虑尝试一下。
网友评论