网站加载速度优化:怎样排除缓存造成的假象
📍 WDQWDWQD987AAAAA:216.73.217.75
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /66a32e4fc1cb.html
📄
网站加载速度优化:怎样排除缓存造成的假象
要排除缓存造成的假象,核心做法是让同一次测试同时经过“无缓存路径”和“有缓存路径”,并对比两者的首字节时间、传输大小和资源版本。只看浏览器刷新后的结果,很容易把本地缓存、CDN 缓存或 Service Worker 缓存当成真实性能。下面这份清单按“查什么、怎么查、结果说明什么”组织,可直接在已有页面上执行。
先分清你看到的是哪一层缓存
网站加载速度优化时,缓存假象通常来自四层:浏览器磁盘缓存、Service Worker 缓存、CDN 边缘缓存、服务端页面缓存或对象缓存。它们都会让重复请求变快,但快的原因不同。
- 查什么:响应头里是否有
cache-control、age、cf-cache-status、x-cache、etag 等字段。
- 怎么查:在浏览器开发者工具的 Network 面板勾选 Disable cache,再刷新页面,查看每个请求的 Response Headers。
- 结果说明什么:出现
age 大于 0 或命中状态为 HIT,说明中间缓存参与了响应;勾选 Disable cache 只对浏览器缓存生效,CDN 和服务端缓存仍可能命中。
用无痕窗口与硬性刷新做第一轮对照
无痕窗口默认不读取普通窗口的磁盘缓存,但仍可能使用内存缓存和 Service Worker。硬性刷新会绕过部分缓存,但不是所有层都绕过。
- 查什么:同一 URL 在普通窗口、无痕窗口、禁用缓存后的开发者工具中,加载耗时和传输大小是否一致。
- 怎么查:先普通刷新记录一次,再开无痕窗口记录一次,最后在开发者工具中勾选 Disable cache 记录一次。三次都使用相同网络条件。
- 结果说明什么:若普通刷新明显更快、传输大小为 0 或来自 memory cache,而无痕与禁用缓存结果接近,说明之前的“快”主要来自本地缓存,不能代表首次访问者的体验。
给资源加版本参数,验证缓存是否真的失效
静态资源被长期缓存时,页面更新后用户可能仍拿到旧文件。此时加载速度看起来很好,但内容不是最新的,属于另一种缓存假象。
- 查什么:CSS、JS、图片的 URL 是否带内容哈希或版本查询参数,例如
app.3f2a1c.js 或 style.css?v=20240601。
- 怎么查:修改一个静态文件内容并发布,观察 HTML 中引用的资源 URL 是否变化;若不变,再看响应头中的
etag 或 last-modified 是否触发 304。
- 结果说明什么:URL 不变且返回 304,说明浏览器复用了旧缓存;URL 变化并返回 200,才说明新版本被真正拉取。对需要即时更新的资源,应使用内容哈希文件名,而不是只依赖手动刷新。
在服务端和 CDN 侧做一次回源对比
页面在浏览器端很快,不代表源站快。CDN 缓存命中时,用户拿到的是边缘节点副本;回源请求才能反映源站真实处理时间。
- 查什么:响应头中的缓存命中状态、
age、via,以及源站直连时的首字节时间。
- 怎么查:用
curl -I 请求带缓存参数的 URL,再用同样命令请求一个带随机查询参数的 URL,例如 ?nocache=时间戳,对比两次的响应头和耗时。随机参数可能绕过部分 CDN 缓存,但不保证绕过所有缓存。
- 结果说明什么:带随机参数请求明显变慢,说明之前的速度来自 CDN 或服务端缓存;若两者都慢,问题在源站、数据库或上游接口,而不是缓存假象。
检查 Service Worker 是否在接管请求
Service Worker 可以拦截请求并返回缓存副本,刷新页面时甚至不会走网络。它造成的假象最隐蔽,因为开发者工具可能显示请求来自 Service Worker。
- 查什么:Application 面板中是否有已激活的 Service Worker,Cache Storage 中是否存有当前页面资源。
- 怎么查:在开发者工具中取消注册 Service Worker,勾选 Bypass for network 或 Update on reload,再重新加载页面并记录耗时。
- 结果说明什么:取消注册后速度明显下降,说明此前结果被 Service Worker 缓存美化。需要评估缓存策略是否让用户长期拿不到新版本,而不是只关注数字变快。
用同一套条件复测并记录判断依据
排除缓存假象不是一次刷新就能完成,而是固定测试条件后重复对比。建议至少记录:URL、是否禁用缓存、是否无痕、响应状态码、传输大小、首字节时间、缓存命中状态。
判断标准可以简化为:首次访问模拟结果与重复访问结果差距越大,缓存对速度的贡献越高;若首次访问仍然慢,优化重点应放在源站响应、关键资源体积和阻塞渲染的资源上。下一步,选取一个代表性页面,按上面的清单做三次对照测试,把“缓存命中”和“真实首次加载”两组数据分开记录,再决定优化优先级。