设置缓存预热
先测一测:自我调用行得通吗?
预热的意思是,您的网页服务器去访问它自己的页面。这在您这里是否行得通,由“测试自我调用”按钮来回答:它会正好取一次首页,并报告状态码、传输大小和响应时间。如果返回 HTTP 401 或 403,通常是前面挡着一道访问屏障——测试站点前的 Basic-Auth 或者一道防火墙。如果测试跑进了它 10 秒的时间限制,那往往是服务器把自己堵住了,因为只有一个 PHP 工作进程空闲,而它已经被您这次点击占用了。还会一并检查另外两个先决条件:页面缓存必须已启用,缓存目录必须对网页服务器可写。只要其中一项没满足,预览和开始就保持禁用状态,原因会以明文写在下方。
地址从哪里来
有两个来源。“Sitemap”覆盖整个站点;不填写时会采用 /wp-sitemap.xml,Yoast 和 Rank Math 则把自己的放在 /sitemap_index.xml。Sitemap 索引会向下追踪一层,最多经过 25 个子 Sitemap。只能填写本站的地址,外部主机会被拒绝并给出错误提示。如果一个地址都没有返回,提示会说明原因——最常见的是:在“设置 › 阅读”中启用了“建议搜索引擎不索引本站点”,于是 WordPress 关掉了自己的 Sitemap,转而输出 404 页面,而且状态码是 200。只看状态码的人会把这当成成功。“最近修改的内容”不需要 Sitemap:首页、文章页以及最近编辑过的文章和页面,默认 50 条,可在 5 到 500 之间设置。在日常使用中,这往往是更合适的来源,因为您刚刚编辑过的内容已经从缓存中掉出来了,而且接下来就会被访问。
读懂预览
“检查队列”只做计数——在此之前不会改变任何东西。这份清单分得很清楚:找到的地址、重复的地址、位于外部主机上的地址、永远不会被缓存的地址(最多给出八个例子并附上原因)、以及已经在缓存中且仍然新鲜的地址。最下面是真正会被抓取的数量,另外还有前十二个地址供您核对。如果出现“超出上限”这一行,说明剩下的部分放不进一次运行:默认是 300 个地址,允许 10 到 5000。通过“范围”,您可以在“仅缺失的页面”和“全部重新生成”之间做选择。重新生成不会丢失任何东西——缓存文件在每次访问时都会自己重新产生。顺便一提,启动时队列会重新建立,而不是沿用预览里的那份列表;检查和点击之间可能隔着好几分钟。
分批、时间限制,以及谁在推动这次运行
一个步骤默认抓取 5 个地址(可在 1 到 20 之间设置),并且最迟在 20 秒后交还控制权,以免有请求跑进服务器的时间限制。每个地址还另有自己的时间限制,默认 10 秒,可在 3 到 30 之间设置;超过之后该地址算作失败,运行继续。在性能较弱的硬件上,请把批次大小调小,而不是调大:这样运行会久一些,但站点在此期间仍然可以使用。只要管理页面还开着,这些步骤由浏览器推动,之后则由 WP-Cron 推动——在一个单独的请求里,没有访客在等它。如果设置了 DISABLE_WP_CRON,那么关掉标签页之后,只有当服务器上有真正的 Cron 调用 wp-cron.php 时才会继续。任何时候都只有一个步骤在工作;一把 120 秒的锁可以防止两个打开的标签页、或者浏览器与 Cron 重复抓取同样的地址并把数字重复计算。“中止”在两个地址之间就会生效,而不是等到这一批结束;已经生成的缓存文件仍然有效。
读懂结果并让运行自动开始
每一次抓取都恰好落在三行中的一行里。“已存入缓存”意味着:抓取之后文件确实在那里了——检查的是文件系统,而不是状态码。“已送出,但未缓存”意味着:页面返回了,却没有被保存;这时通常是页面缓存的某条排除规则起了作用,该去那里检查,而不是在这里。“失败”指的是超时、错误码和重定向;重定向被刻意不予追踪,因为进入 Sitemap 的应当是目标地址。日志保留最近 40 次抓取,表格从中显示 25 条,含地址、状态码、时长和结果。自己发起的这些抓取带有一个标记,因此不会计入缓存的命中率——否则统计数字会上升,而访客却什么也没得到。有两个开关可以在没有您参与的情况下启动运行:在清空缓存之后,以及按计划任务,每小时、每天两次或每天一次(默认每天一次)。两者都只在没有任何先决条件缺失时才会开始。