讨论抓取时,注意力通常放在 HTML、状态码、内链结构和 Sitemap 上。但蜘蛛在真正拿到页面内容之前,还有一段不常被提起的路要走:找到服务器、建立连接、完成握手、等待后端返回第一个字节。这几步如果慢或者不稳定,抓取节奏会从源头被限制,后面再优化页面的意义也会打折扣。
DNS 解析:第一个可能卡住的地方
蜘蛛拿到一个 URL 后,第一件事是把域名解析成 IP 地址。如果权威 DNS 响应慢、偶尔超时,或者返回结果在不同解析器之间差异很大,蜘蛛在发出 HTTP 请求之前就已经耗掉了一部分时间和重试机会。
- 解析服务要可靠:避免单点,选择响应稳定的 DNS 服务商。
- 减少 CNAME 层级:多级 CNAME 会拉长解析路径,每一跳都是额外等待。
- 检查解析一致性:不同地区、不同递归解析器拿到的结果是否一致。
- 谨慎做频繁切换:解析结果在多个 IP 之间大幅来回变动,容易让连接落在状态不一致的节点上。
TLS 握手与连接复用
现在绝大多数站点走 HTTPS,每个新连接都要完成 TLS 握手。握手轮次越多,蜘蛛在拿到数据前等的时间越长。支持 HTTP/2 或 HTTP/3、启用会话复用,可以让蜘蛛重复访问同一站点时省掉一部分握手成本。
还要留意两类容易被忽略的问题:证书链不完整、证书临近过期,或者只支持过旧的协议套件。这些情况在浏览器里不一定看得出来,因为浏览器可能已经缓存了会话,而蜘蛛每次都是相对干净的新连接。
首字节时间:后端处理决定等多久
TTFB 指从发出请求到收到第一个字节的时间,它把服务器排队、应用处理、数据库查询、缓存命中的结果都算了进去。TTFB 长期偏高,意味着蜘蛛每一次抓取都要等更久,单位时间内能走的页面数量自然下降。
- 确认静态页面和列表页能否走 CDN 或反向代理缓存。
- 排查慢查询、同步的外部接口调用、串行执行的后端请求。
- 关注负载上升时 TTFB 是否明显恶化,而不是只看平峰时段的表现。
稳定性比峰值速度更重要
很多时候问题不在平均响应时间,而在波动。蜘蛛遇到间歇性的超时、5xx、连接被重置,它会主动放慢抓取频率,即使之后服务器负载已经降下来,恢复也需要时间。
抓取是一个持续的过程,蜘蛛记住的是整体体验,而不是某一次特别快的响应。
一个可执行的排查顺序
- 先看 DNS:解析耗时、解析结果一致性、CNAME 层级。
- 再看连接:TLS 握手耗时、证书有效性、协议版本支持情况。
- 然后看 TTFB:按时段和页面类型分开统计,不要只看平均值。
- 接着看错误率:超时、5xx、连接被拒出现的频率与分布。
- 最后对照服务器日志和抓取工具的数据,确认瓶颈落在哪一段。
这些环节都发生在内容返回之前,却决定了蜘蛛愿不愿意、能不能稳定地把抓取继续下去。把连接阶段的稳定性做扎实,往往比事后反复调整抓取相关参数更直接有效。