缓存优先策略必须在fetch事件中显式调用caches.match()并配合event.respondwith()实现,不能仅靠install阶段预缓存;它仅适用于同源、可克隆的get请求,需在install阶段预置静态资源、activate阶段清理旧缓存,并避免缓存带查询参数或动态接口。

缓存优先策略在 Service Worker 中必须通过 fetch 事件 + caches.match() 显式实现,不能依赖浏览器默认行为;它只对同源、可被克隆的 GET 请求有效,且需配合 install 和 activate 阶段完成资源预置与旧缓存清理。
缓存优先策略必须在 fetch 事件中手动匹配
很多人误以为只要在 install 阶段调用 cache.addAll() 就自动“缓存优先”了——其实不是。Service Worker 不会自动拦截并返回缓存,必须在 fetch 事件里显式调用 caches.match(request) 并返回结果。
-
caches.match()返回 Promise,需用.then()处理匹配结果,未命中时应 fallback 到fetch() - 必须用
event.respondWith()包裹整个响应逻辑,否则请求仍走浏览器默认流程 - 避免直接
return response:Response 对象只能被读取一次,缓存写入前需调用response.clone() - 动态接口(如带
?token=或 POST)不应参与缓存优先,否则可能返回过期或错误数据
install 阶段要预缓存静态资源,但不能缓存所有路径
install 阶段是唯一能“提前加载并存入缓存”的时机,但缓存内容必须可控——盲目缓存根路径 '/' 或通配符会导致失败或不可预测行为。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 只缓存明确的、版本化的静态资源路径,例如
'/index.html'、'/css/app-abc123.css'、'/js/main-d4e5f6.js' - 避免缓存带查询参数的 URL(如
'/api/data?user=123'),cache.match()默认按完整 URL 匹配,参数不同即视为新请求 - 使用
event.waitUntil()包裹caches.open().then(...),否则安装可能失败或不完整 - 添加
self.skipWaiting()可让新 SW 立即激活,但需确认旧缓存已清理,否则可能混用多版本缓存
activate 阶段必须清理旧缓存,否则缓存会持续堆积
每次更新 Service Worker,若不主动删除旧缓存,caches.keys() 会不断累积历史版本(如 'v1'、'v2'、'static-v3'),占用用户设备存储且可能导致匹配混乱。
- 在
activate事件中调用caches.keys()获取全部缓存名,用.filter()筛出非当前版本的名称 - 对每个待删缓存名调用
caches.delete(name),注意该操作也返回 Promise,需用Promise.all()统一等待 - 建议搭配
self.clients.claim(),确保当前页面立即受新 SW 控制,避免部分请求仍被旧 SW 拦截 - 不要在
activate中执行耗时操作(如遍历缓存逐条检查),仅做名称级清理即可
跨域、CORS 和请求方法限制容易被忽略
Cache API 不是万能的:它对请求来源、方式和响应头有硬性约束,违反任一条件都会导致 cache.put() 或 cache.match() 静默失败或抛错。
- 非同源资源(如 CDN 上的字体、第三方 JS)必须开启 CORS(响应头含
Access-Control-Allow-Origin),否则cache.put()会拒绝存入 - 只有
GET请求可被缓存;POST、PUT等方法的请求对象无法存入 Cache API -
Request实例一旦被读取(如用于fetch()或cache.match()),就不能再次使用,需在需要复用时提前request.clone() - 某些响应类型(如
opaqueredirect)无法被缓存,常见于重定向响应,需在fetch后检查response.type
真正难的不是写几行 caches.match(),而是想清楚哪些资源该进缓存、什么时候该清、以及当用户从 v1 版本页面跳转到 v2 版本时,如何保证 HTML 和 JS 不因缓存错配而白屏或报错——这需要路径命名、哈希校验、SW 生命周期协同设计,而不是单靠一个 API 调用解决。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










