service worker 降级核心是“用缓存兜住失败”,预缓存html/css/js等静态资源并带版本号,拦截navigate请求fallback至内联式离线页,按资源类型分层采用cache first、network first+fallback等策略,activate时清理旧缓存并claim客户端。

Service Worker 实现资源降级处理,核心是“用缓存兜住失败”,而不是等网络恢复再响应。它不追求最新,而是确保用户始终能看到可用内容——哪怕只是简化版页面或旧数据。
预缓存关键静态资源,让首页“永远能打开”
安装阶段(install)必须把 HTML 入口页、CSS、JS、图标、字体等打包进缓存,并带明确版本号(如 m2lorder-v2-static)。这样即使后续网络中断,用户刷新页面仍能加载完整结构。
- 入口 HTML 必须自包含:内联关键样式和脚本,或确保所有依赖路径(如
/css/app.css、/js/vendor.js)都列入预缓存列表 - 文件名建议带哈希(如
app.a3f2.js),避免版本混淆;HTML 不适合走 Cache-First,需配合 navigate 拦截逻辑 - 使用
caches.open().then(cache => cache.addAll(urls)),并用event.waitUntil()确保缓存写入完成
拦截导航请求,fallback 到离线页
fetch 事件中识别 request.mode === 'navigate',这是用户跳转页面的关键请求。一旦 fetch 失败(超时、断网、404),立刻返回已缓存的 /offline.html。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
/offline.html必须提前预缓存,且自身不能依赖外部资源(所有样式、脚本内联,图片用 base64 或也加入预缓存) - 不要只 fallback 到空白页或错误提示——提供操作按钮(如“重试”、“查看缓存内容”)能显著提升体验
- 可结合
navigator.onLine做轻量判断,但不可依赖它,因它仅反映系统层面联网状态,无法准确反映真实请求能力
按资源类型分层选择缓存策略
不是所有资源都该用同一种方式缓存。混用策略才能兼顾速度、新鲜度与容错性:
- Cache First:用于 JS/CSS/图片/字体等几乎不变的资源。命中即返回,零延迟
-
Network First + fallback:用于 API 接口(如
/api/user)。先发请求,失败后返回上一次成功缓存的数据,避免白屏或功能中断 - Stale-while-revalidate:适合配置类页面(如帮助文档)。立即返回缓存,后台静默更新,下次访问自动生效
激活新版本时清理旧缓存并接管页面
每次更新 Service Worker,旧缓存若不清除,会导致资源错乱(比如新 JS 加载旧 CSS)或离线页打不开。
- 在 activate 事件中调用
caches.keys(),遍历删除非当前版本的缓存(如v1、old-static) - 执行
self.clients.claim(),让新 SW 立即接管所有已打开页面,避免刷新后仍走旧逻辑 - 上线前务必验证:HTTPS 是否启用(localhost 除外)、注册时机是否在
load后、DevTools 中确认状态为 “Activated and is running”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










