要排除缓存造成的假象,核心做法是让同一份内容在“绕过缓存”和“经过缓存”两条路径下分别取一次结果,再对比差异。如果绕过缓存看到的是新内容,经过缓存看到的是旧内容,说明假象来自缓存层;如果两条路径结果一致,缓存就不是原因,应继续检查数据库、主题模板或插件逻辑。多人协作时,把这个对比结论和证据一起交付,能避免反复争论“到底改没生效”。
不要只说“我清了缓存还是不行”,这类描述无法验收。一次可交付的缓存排查应包含四项资料:
?ver=2。Cache-Control、Expires、Age、X-Cache 一类字段。责任划分也要写清楚:谁负责清服务器缓存,谁负责清CDN缓存,谁负责确认浏览器本地缓存。缺少责任人的清单在多人协作中基本会返工。
WordPress服务器前面通常不止一层缓存:浏览器本地缓存、CDN边缘缓存、反向代理缓存、对象缓存,以及页面缓存插件。判断顺序是从最外层往里走。
可以先用命令行取响应头,观察是否命中缓存。假设示例:某页面更新后仍显示旧标题,执行两次请求,第一次返回 Age: 320,第二次 Age 继续增大,说明响应来自某个共享缓存且未过期。这时如果直接去改主题文件,方向就错了。
判断依据是:Age 大于0通常表示经过缓存;带 X-Cache: HIT 之类的字段表示命中,但不同服务命名不同,必须以实际响应头为准,不能凭字段名猜测。若响应头里完全没有缓存标识,也不能立刻断定没有缓存,有些代理会剥离这些字段,需要结合正文新旧对比。
这是最能定位问题的一步。给URL加一个此前没用过的查询参数,例如在原地址后加 ?nocache=20240101a,再取一次内容。多数页面缓存会把带新参数的地址当作新资源,从而回源。
结果分三种情况:
适用条件是页面缓存按完整URL做键。如果站点配置了忽略查询参数的缓存规则,这个方法会失效,此时改用清缓存后再对比,或从服务器本机直接请求源站。
排查中最容易出错的是把猜测当成结论。以下现象都有多种解释,不要只归因于缓存:
只有拿到响应头证据或绕过缓存对比结果,才能写成“已经定位的原因”。否则在交付文档里应标注为“可能原因,待验证”,并写明下一步验证动作。这样接手的人不会基于错误结论继续改代码。
把下面几项作为验收条件,可以让缓存问题闭环:
如果验收时仍不一致,不要继续扩大改动范围,先回到响应头对比这一步,确认差异出现在哪一层,再决定下一步动作。