核心是Service Worker拦截请求+Cache API管理资源,实现离线可用、加载快、不空白;install阶段预缓存HTML/CSS/JS等关键骨架资源,fetch阶段采用Cache First等策略优先返回缓存,并配合manifest.json构建完整PWA体验。

核心是用 Service Worker 拦截请求 + Cache API 管理资源,让页面在断网时仍能打开、加载快、内容不空白。
预缓存关键资源,确保首屏秒开
在 Service Worker 的 install 阶段,把 HTML、CSS、JS、图标等静态文件提前存入缓存。这些是用户第一次访问就必需的“骨架”,缓存后离线也能渲染主界面。
- 缓存名称建议带版本号(如
'pwa-cache-v2'),便于后续更新时清理旧缓存 - 所有资源路径必须是相对根路径或绝对 URL,且同源;
cache.addAll()失败会导致安装失败,需确保列表精简可靠 - 常见预缓存项:
['/', '/index.html', '/app.js', '/style.css', '/icons/icon-192.png']
fetch 事件中实现缓存优先策略
每次网络请求触发 fetch 事件时,先查缓存;命中则直接返回,没命中再发网络请求,并把响应存入缓存(可选)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对 HTML 和核心静态资源用 Cache First:优先保障可用性,哪怕内容稍旧
- 对 API 数据建议用 Network Falling Back to Cache 或 Stale-while-revalidate:先返回缓存数据保证界面不卡,再后台拉新数据更新缓存
- 可为不同资源类型设置不同策略,比如图片走网络优先+缓存回退,避免首次加载空白
配合 manifest.json 实现安装与启动体验
离线缓存只是基础,完整 PWA 体验还需 manifest.json 支持:
立即学习“Java免费学习笔记(深入)”;
- 定义
name、short_name、icons(至少含 192×192 和 512×512 PNG)、start_url和display: 'standalone' - 设置
theme_color和background_color控制启动画面和状态栏颜色 - 确保该文件通过 HTTPS 提供,并在 HTML 中用
<link rel="manifest" href="/manifest.json">引入
管理生命周期,避免缓存 stale 或失效
Service Worker 更新不是自动覆盖,需主动处理旧缓存和旧 SW:
- 在 activate 事件中遍历
caches.keys(),删除不再使用的缓存名(如旧版本 cache) - 调用
self.skipWaiting()让新 SW 立即激活,避免等待旧 SW 完成所有 fetch - 注册时加
.then(() => self.clients.claim())(可选),让新 SW 立即控制当前页面 - 所有功能必须运行在 HTTPS 下,本地开发可用
localhost例外

















