workbox.routing.registerRoute(
  ({request}) => request.mode === 'navigate',
  new workbox.strategies.NetworkFirst()
)

发布后手机打开首页还是上一版,标题和封面都没换,桌面浏览器强制刷新才更新,安卓端连续刷新五次依旧是旧内容。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,导航请求被 cache-first 规则命中,缓存里有就直接返回,网络上的新 HTML 根本没机会替换。这个策略给静态资源用没问题,用在 document 请求上就会把整页冻住。

围绕「cache-first 导航」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:把导航请求单独拆出来,改成 network-first,请求失败再回落到缓存的那份 HTML;静态资源仍走 cache-first,两类请求分开写,别共用一条判断;改完在 Network 面板确认 document 请求真的发了出去,来源不是 Service Worker。

改完只确认一件事:发布一篇文章后刷新首页,标题第一次刷新就变,断网再打开仍能看到上一次的页面。

作者 9823189