只看成功页面,会把速度检测工具的报告变成一份“幸存者名单”:加载失败、被中断、被拦截、超时放弃的访问不会出现在样本里,于是你看到的平均加载时间、慢页比例和瓶颈分布,都被系统性压低或扭曲。要修正这一点,必须把失败与放弃的访问重新纳入同一套诊断口径,而不是继续优化那份已经很好看的成功列表。
速度检测工具通常以“页面成功返回并完成加载”为统计前提。这个前提在监控里是合理的,但在诊断里会引入筛选:网络差、设备旧、地区远、被脚本阻断的访客,恰恰是最容易出问题的那部分人,他们被提前剔除。剩下的样本偏向网络条件更好、浏览器更主流、路径更顺畅的访问,结论自然偏向乐观。
这种偏差不会以“数据错误”的形式出现,它更像一个安静的缺口。你以为在看全量表现,实际在看“能撑到终点的人”的表现。判断是否存在偏差,可以看三类线索:加载完成率是否明显低于请求量;同一页面在不同地区或设备的完成率是否差距很大;被中断的会话是否集中在特定入口或特定资源。
先不要急着改代码,先改样本。以你手上某一份速度报告为对象,做一次口径对齐:
做完这一步,你会得到一张断点分布图,而不是一个平均分。这个动作的直接结果是:原本被平均分掩盖的失败,会以“某类访问在某阶段集中掉队”的形式暴露出来,下一步的优化对象也随之从“整站提速”变成“修复某个具体断点”。
失败样本补回来后,还要避免另一种误判:把所有未完成都当成速度问题。可区分的原因至少有四类:
区分方法不是看单一指标,而是看时间线:如果失败点出现在首字节之前,更可能是连接或服务端问题;如果出现在首屏渲染之后,更可能是交互或内容问题。把这几类混在一起算平均,会同时高估和低估问题。
假设某页面在速度检测工具中记录到 1000 次成功加载,平均耗时 2 秒;同时站内日志显示该页面共收到 1400 次请求。差异的 400 次就是被成功样本排除的部分。假设这 400 次中有 300 次在首字节阶段中断,那么真实的首字节压力远高于成功样本呈现的水平。此时继续压缩图片、合并脚本,对那 300 次中断几乎没有作用;优先排查服务端响应和连接建立,才对应真正的断点。这个例子只用于说明比较方法,不代表任何真实项目结果。
修正选择偏差后,速度检测工具的使用方式会变:不再只对比平均分,而是同时记录完成率、断点阶段和失败分组。下一次检测时,先看完成率是否变化,再看断点是否前移或后移。如果完成率没动而平均耗时下降,说明优化只惠及了原本就能成功的访问;如果完成率上升,才说明被排除的那部分人开始进入样本。这个判断顺序,能避免把“成功页面更快了”误读成“网站整体更快了”。
需要强调的是,请求量、抓取量或某项统计归零,不能单独证明处理正确,它也可能是采集方式变更、拦截规则调整或统计口径切换的结果。把成功与失败放在同一张时间线上核对,才是可执行的下一步。