PWA 性能预算
离线命中不能掩盖首次加载慢;分别记录冷启动、热启动、弱网和更新成本。本节先把用户任务拆成在线成功、离线暂存、恢复重放和永久失败四个状态,再决定浏览器 API。
最小协议
js
performance.getEntriesByType('navigation')运行时记录状态变化和版本号。缓存、队列、通知或安装事件都有系统生命周期,页面关闭、用户登出、权限撤回和新版本发布时必须重新检查所有权。
失败边界
- 网络失败、服务器拒绝、权限拒绝和设备终止不是同一种错误。
- 重放必须防重复;服务端需要幂等键或版本条件。
- 离线 UI 要说明数据新鲜度、待同步数量和最终失败,而不是伪装为成功。
- 浏览器不支持某个 API 时要保留核心任务的在线/手动路径。
可运行实验
离线命中不能掩盖首次加载慢;分别记录冷启动、热启动、弱网和更新成本。打开 DevTools 模拟离线、清除站点数据、切换标签页和更新版本,记录每次状态转移。真实 Service Worker、权限和安装行为只在浏览器环境验证。
练习
- 写出成功、离线、重放冲突和永久失败的断言。
- 加入幂等键、版本或撤销操作,并解释重复执行的结果。
- 为不支持该能力的浏览器设计可用降级路径。