搜索抓取

响应时间与抓取预算:服务器慢下来时,蜘蛛先放弃哪一部分

抓取预算不只是页面数量和链接结构,也和每次请求的耗时有关。本文从蜘蛛视角拆解一次抓取的时间构成,说明 TTFB 变慢后抓取量、回访间隔与 URL 发现会受到什么影响,并给出按模板定位慢点、分阶段计时、稳定优先的排查顺序。

搜索抓取

响应时间与抓取预算:服务器慢下来时,蜘蛛先放弃哪一部分

抓取预算的另一半:时间

谈到抓取预算,多数人先想到页面数量和内链结构,但蜘蛛在一个站点上能抓多少,还取决于每一次请求要花多少时间。同一段时间窗内,响应快的站点能完成更多次抓取;响应慢的站点,并发槽位被长时间占住,单位时间的抓取量就往下掉。

换句话说,服务器响应时间不是运维指标,它同时也是一个抓取侧的变量。它不会直接决定某个页面是否被收录,但会影响蜘蛛愿不愿意把有限的额度分给这个站。

一次抓取的时间花在哪

从蜘蛛的视角看,取回一个 URL 大致经过这些阶段:DNS 解析、TCP 与 TLS 握手、发送请求、等待服务器返回首字节(TTFB)、接收 HTML,然后再按需取 CSS、JS、图片等子资源。

  • 连接阶段:通常毫秒级,且有复用与缓存,波动不大。
  • TTFB:服务端排队、查库、渲染、等待外部接口,慢点基本都藏在这里。
  • 传输阶段:取决于 HTML 体积和压缩、CDN 回源情况。
  • 子资源阶段:CSS/JS 越多越重,渲染型蜘蛛的成本越高。

真正容易失守的是 TTFB 和后两项。连接层只要证书、DNS、机房没出问题,一般是稳定值;TTFB 却会随着流量、缓存命中率、数据库状态上下浮动。

服务器慢下来之后,会连锁发生什么

  • 单位时间抓取量下降:同样几分钟,快站能跑完几十个 URL,慢站可能只跑完几个,剩下的排队或被放弃。
  • 抓取集中在少数入口:蜘蛛倾向先确保首页、栏目页这类高价值 URL,深处页面更晚才被排到。
  • 回访间隔被拉长:当同一批 URL 反复耗时偏长,蜘蛛会降低对这部分的访问频率。
  • URL 发现变慢:新链接即使已经出现在页面上,也要等上一轮抓取完成才有机会被排入队列。
  • 超时被记为失败:长期没有正常返回的地址,会慢慢从抓取队列里淡出。

这些变化往往不是一夜之间出现的,而是两三周里抓取量缓慢下滑,日志上看起来只是“蜘蛛来得少了”。

几个容易被忽略的慢点

动态页面没有缓存

列表页、搜索结果页、标签聚合页常常每次请求都打一次数据库或聚合接口。蜘蛛访问的 URL 组合比真实用户多,这类页面很容易成为 TTFB 的重灾区。

页面里嵌了同步外部请求

服务端在渲染时同步调用第三方接口(汇率、库存、推荐),对方一抖动,整页就跟着慢。蜘蛛不会区分这是你的问题还是对方的问题。

缓存穿透与冷启动

蜘蛛访问的很多时候是冷门 URL,缓存里没有,正好落在最慢的那条路径上。真实用户常访问的热页面反而一直很快,容易被误判为“站点没问题”。

抓取高峰踩上业务高峰

如果站点流量本身有明显波峰,蜘蛛的抓取高峰与之重叠时,整体 TTFB 会一起被推高。

怎么定位:按模板分组,看分阶段耗时

  1. 先把 URL 按模板归类:首页、栏目页、详情页、列表分页、标签页,分别抽样。
  2. 看每组的 TTFB 中位数和尾部分布,而不是只看平均值。尾部耗时才是拖慢抓取的那部分。
  3. 对照蜘蛛日志中的抓取时间戳,观察同一地址两次抓取之间的间隔是否在变长。
  4. 把已知的慢查询、外部接口调用、未命中的缓存点列出来,逐一验证。
  5. 优化后用同一组 URL 复查,确认改善发生在蜘蛛实际访问的页面上,而不只是首页。

稳定比极限快更重要

一个 TTFB 稳定在 300ms 的站点,通常比平时 80ms、高峰期 3s 的站点更好抓。蜘蛛依赖的是可预测的节奏,剧烈的耗时波动会让它更谨慎地调整抓取速率。

抓取预算并不会因为一次优化而永久变大,它是站点长期响应表现的副产品。把常见模板的响应做进一个可预测的区间,比偶尔跑出一次极速更有意义。

如果暂时无法整体提速,至少先保证两点:静态资源和 HTML 可缓存,错误路径(登录、搜索、过滤参数)不要拖住正常页面的响应。这两件事做完,蜘蛛在站内的抓取路径通常会更完整一些。