蜘蛛来抓一個頁面,過程大致可以拆成两段:先是服務器處理請求並返回首字节,然後才是頁面内容传輸。第一段的時間,一般叫 TTFB(首字节時間)。它不像 5xx 那样刺眼,也不像 404 那样容易發現,但它會稳定地吃掉抓取配額。
响應時間為什么會影响抓取
蜘蛛手里的並發连接是有限的。同一個站点,如果單次請求要等两秒才返回首字节,那么在相同的時間窗口里能取走的頁面數量就會明顯變少。更麻烦的是,等待時間過長還可能触發超时,請求被中断,這一趟基本白跑。
反過来看,同样的一批配額,响應快的站点可以让蜘蛛多跑几轮,新發布的内容也更容易在短時間内被取走。响應時間不直接决定收錄,但它影响發現和更新的效率。
先把真實數字量出来
在動手優化之前,先確認自己站点的真實水平,避免凭感觉下判断。可以用几種方式互相印證:
- 用命令行工具請求几個代表性 URL,只看首字节時間,而不是整頁渲染完成的時間。
- 看 Web 服務器訪問日誌里的請求耗时字段,按时段、按栏目分類統計。
- 在浏览器開發者工具的網絡面板里,区分排队、DNS、TLS、等待响應各占多久。
- 重点抽样栏目首頁、列表頁、詳情頁三類,而不是只看首頁。
常见的几類拖慢原因
- 資料库层面:列表頁每次都跑全量統計或缺少索引,資料量涨上来後,單次查询從几十毫秒變成几百毫秒。
- 缓存层面:頁面缓存命中率低,或者缓存被频繁寫失效,等于每次請求都回源重建。
- 外部依赖:渲染頁面时同步調用第三方接口,對方一抖動就直接传導到自己的响應時間上。
- 资源處理:图片、附件和大文件與頁面請求走同一套處理流程,抢占连接和進程。
- 环境問题:日誌同步寫盘、磁盘接近寫满、進程數不足、TLS 握手频繁重建。
一份可执行的自查清單
- 随机抽取 10 個詳情頁和 5 個列表頁,分別记錄首字节時間,看是否存在明顯偏慢的類型。
- 打開慢查询日誌,確認是否有頁面級請求触發全表掃描或大排序。
- 查看缓存命中率與失效策略,確認缓存時間是不是被設定得過短。
- 梳理頁面渲染過程中調用了哪些外部服務,能否改為异步或加上超时與降級。
- 確認服務器磁盘余量、進程數量與内存使用是否還在安全区間。
- 在訪問日誌里搜尋超时记錄,看超时集中在哪些 URL 或哪個時間段。
能立刻做的提速動作
- 给列表頁和詳情頁加頁面缓存,設定合理的過期時間。
- 為高频查询字段补索引,把統計類計算挪到定时任務里执行。
- 把第三方調用改成异步,或加短超时與預設值,避免拖住整頁。
- 静態资源交给 CDN,减少源站压力。
- 把耗时任務(生成缩略图、導出报表)放進队列里跑。
別只看平均值
平均值好看,可能只是绝大多數請求很快,而少數頁面慢到超时。蜘蛛遇到的是具体那一次請求,所以更该關注 P95、P99 以及超时比例。
改動之後怎么驗證
調整完成後,不要只靠一两次手工測試就下结论。回到服務器日誌,對比改動前後蜘蛛的抓取量、超时次數與响應狀態分布,观察一到两周再判断效果。如果有條件,按栏目分開看,確認提速是否覆盖了此前最慢的那部分頁面。
响應時間是基础工程問题,很难一步到位。把测量、定位、小步修改、再看資料這個循环跑顺,通常比一次性做大改動更稳妥。