带 hash 的静态 JS 每次刷新 Network 里都显示 200 而不是 304 传输大小一点没减 回源次数也跟着涨 Chrome 一直提示 Serve static assets with an efficient cache policy 首屏因此多花 1.2 秒。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl -sI https://example.com/app.js | grep -i cache-control
# 期望 public, max-age=31536000, immutable

服务端没给 Cache-Control 浏览器只能按启发式规则猜 多数情况直接回源 带内容哈希的文件本来一年都不会变 完全有条件做长期强缓存。这一点先确认清楚,后面就不用反复试。

「Cache-Control 配置」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,带哈希的静态资源统一设置 public max-age 一年时间 再加上 immutable 标记;HTML 单独设 no-cache 保证发版之后能立刻拿到新的引用地址;确认 CDN 没有覆写源站的缓存头 两边策略要保持一致。

改完照着核一遍,第二次访问静态资源显示 from disk cache 传输列变成 0 字节 回源次数明显减少。

作者 9823189