先给结论:在页面性能监控工具里,A/B 或灰度版本混跑时,样本污染通常不会表现为报错,而表现为同一指标在两个版本间出现无法用版本差异解释的漂移。识别它的关键不是看总量,而是看“分组归属”和“数据来源”是否在采集链路中保持一致。若分组由前端脚本决定、上报却由另一套 SDK 完成,污染概率显著上升。
假设你同时上线了新版和旧版页面,监控工具显示新版首屏时间比旧版快约 200ms。但隔一天再看,差距缩到 30ms,再过一天又反向。若只盯汇总曲线,很容易得出“新版不稳定”的结论。这里有两种合理解释:
两者都会造成差异漂移,但处理方向完全不同:前者要查资源加载,后者要查分组与上报的一致性。
要判断是哪一种,先看分组标识在采集链路中是否稳定。可核查的证据链包括:
这三条中,第一条最直接。若访客 ID 在两组间反复出现,就不必再争论版本性能,先修分组。
识别污染后,常见的选择是继续用前端分组,还是改为服务端分组。两者成立条件不同:
若你的监控工具只能从前端脚本读取组别,强行改服务端分组并不会自动解决污染,因为上报时仍可能拿不到服务端字段。此时更实际的动作是:在监控工具中增加一个“组别来源”标记,区分前端赋值和服务端赋值,再分别观察两类的差异。这个动作的结果会直接影响下一步——如果前端赋值那部分差异明显更大,就优先收敛前端赋值路径,而不是全量推翻分组方案。
假设某页面用 URL 参数区分版本,访客首次进入时参数为 A,分享出去的链接可能丢失参数,被系统默认补为 B。此时监控工具会把这名访客的后续访问记为 B 组。若这名访客恰好网络较慢,B 组指标就被拉高。这不是版本 B 真的慢,而是样本里混入了本应属于 A 的访客。验证方法很简单:检查带参数与不带参数的访问在两组中的占比,若不带参数的访问大量落入同一组,污染来源就找到了。
修完分组后,不要立刻宣布问题解决。请求量或某项统计归零,并不能单独证明处理正确,它也可能只是上报被拦截、脚本未加载或采样策略变化。合理做法是同时保留修复前后的分组归属记录,确认同一访客不再跳组,再对比两版差异是否收敛到可解释范围。若差异仍然漂移,就回到资源加载和第三方依赖去查,而不是继续在分组上打转。