排除缓存假象的核心做法是:让同一份资源分别经过“清空浏览器缓存”“绕过CDN缓存”“直连源站”三种路径加载,再对比耗时与响应头。如果三次结果差异很大,你之前看到的“变快”或“变慢”很可能来自缓存,而不是网站本身的真实加载速度。第一次接触这个问题,起点是先确认你测的是哪一层缓存,而不是急着改代码或换服务器。
网站加载速度的测量结果会被三类缓存影响,表现完全不同:
判断依据是响应头,不是感觉。重点看 Cache-Control、Age、X-Cache、CF-Cache-Status 这类字段:Age 大于 0 说明命中了共享缓存;出现 HIT 说明 CDN 返回了副本;只有 MISS 或没有缓存标记时,请求才真正落到源站。
在动手之前,先把变量控制住,否则清缓存前后对比也不可信:
这一步的产出是一份可复现的基线:同一个 URL、同一组条件、连续测三次,记录每次的总耗时和关键响应头。
本题最关键的动作,是让请求跳过浏览器和 CDN,直接打到源站。常用做法有:
?nocache=20240101a,用于绕过部分 CDN 和代理的缓存键。注意:它只对把查询串纳入缓存键的配置有效,不是万能。Host 头,可以完全跳过 CDN,但需要你确认源站接受这种方式,且证书配置允许。适用条件是:你能确认 CDN 与源站的分层关系。如果站点没有使用 CDN,就只需要处理浏览器缓存和服务器端缓存两层。判断结果是:直连源站明显慢于走 CDN 时,说明你之前看到的快来自边缘缓存;直连与走 CDN 接近,说明缓存对速度贡献有限,瓶颈在别处。
把三次测量放在一起看,而不是只看某一次:
如果首次和二次差距极大,说明静态资源缓存策略生效,这是正常优化,不是假象;如果清缓存前后几乎没差别,说明你之前看到的耗时本来就不依赖缓存。需要警惕的是另一种情况:测试时命中了 CDN,误以为源站很快,实际首次访问用户面对的是慢得多的源站响应。
缓存配置会随发布、改版、换 CDN 而变化,建议在每次上线后做一次固定检查:
下一步建议:选一个你正在关注的页面,按上面的准备条件连续测三次,记录响应头里的缓存标记和每次耗时,先判断你看到的数字属于哪一层缓存的结果,再决定是否调整缓存策略或优化源站。