真实用户监控 RUM 和实验室性能测试有什么区别?
简化版
RUM 是线上真实用户性能数据,能反映不同设备、网络、地域和浏览器下的真实体验;实验室性能测试是在受控环境中跑 Lighthouse、WebPageTest 等工具,适合复现问题和做上线前对比。两者互补:Lab 适合定位和回归,RUM 适合衡量真实体验和业务影响。
详细版
前端性能不能只看一种数据。实验室测试稳定、可重复,适合 CI 和调试;RUM 数据真实、覆盖广,适合判断用户是否真的变慢。
| 维度 | RUM | 实验室测试 |
|---|---|---|
| 数据来源 | 真实用户浏览器 | 固定设备和网络模拟 |
| 优点 | 真实、覆盖广、可关联业务 | 可重复、易定位、适合 CI |
| 缺点 | 噪声大、问题复现难 | 不一定代表真实用户 |
| 常见工具 | web-vitals、Sentry、Datadog、自研埋点 | Lighthouse、WebPageTest、DevTools |
import { onCLS, onINP, onLCP } from 'web-vitals'
onLCP(metric => reportMetric(metric))
onINP(metric => reportMetric(metric))
onCLS(metric => reportMetric(metric))
面试里答“性能监控”时,最好主动区分 RUM 和 Lab,这会显得你不是只会跑 Lighthouse。
完整版教学
一、RUM 解决什么问题
RUM 的全称是 Real User Monitoring,也就是真实用户监控。它运行在用户浏览器里,采集真实访问过程中的性能数据。
真实用户环境很复杂:有人用高端 Mac,有人用低端 Android;有人在 Wi-Fi 下访问,有人在地铁弱网中访问;有人命中缓存,有人首次访问。RUM 能看到这些真实差异。
二、实验室测试解决什么问题
实验室测试是在可控条件下测页面,例如固定网络、固定 CPU 降速、固定浏览器版本。它的优势是可重复。今天改代码前跑一次,改完再跑一次,可以比较差异。
实验室测试特别适合:
- 上线前基准测试。
- CI 性能回归检查。
- 对比两个实现方案。
- 用 DevTools 录制主线程和网络瀑布图。
三、为什么两者不能互相替代
只看 Lab,可能会忽略真实用户问题。例如 Lighthouse 在桌面环境下表现很好,但低端手机上 INP 很差。
只看 RUM,也可能难以定位。RUM 告诉你“某些用户 LCP 变慢”,但具体慢在 DNS、图片、服务端还是 JS 执行,需要 Lab 和 DevTools 进一步复现。
四、RUM 应该采哪些指标
常见采集项包括:
| 指标 | 含义 | 用途 |
|---|---|---|
| LCP | 最大内容渲染时间 | 衡量主要内容出现速度 |
| INP | 交互响应 | 衡量点击、输入是否卡 |
| CLS | 布局偏移 | 衡量视觉稳定性 |
| TTFB | 首字节时间 | 判断服务端和网络延迟 |
| long task | 长任务 | 判断主线程阻塞 |
| resource timing | 资源耗时 | 定位慢资源 |
五、数据分析要看分位数
性能数据常用 p75、p90、p95。p75 表示 75% 的访问不超过这个值,常用于 Core Web Vitals 判断。
平均值容易误导。例如 90% 的用户很快、10% 的用户非常慢,平均值可能看起来还能接受,但慢用户已经很痛苦。
六、如何关联业务
性能监控最好不要只停在技术指标。可以把 LCP、INP 和转化率、跳出率、下单成功率关联起来。
function reportMetric(metric: { name: string; value: number; id: string }) {
navigator.sendBeacon('/rum', JSON.stringify({
name: metric.name,
value: metric.value,
page: location.pathname,
connection: navigator.connection?.effectiveType,
deviceMemory: navigator.deviceMemory
}))
}
这样就能回答“哪些页面慢”“哪些用户慢”“慢是否影响业务”。
七、常见误区与追问
- 误区:Lighthouse 分数高就说明性能好。 Lighthouse 是实验室数据,真实用户仍可能因为设备和网络差而体验很差。
- 误区:RUM 数据波动就是埋点不准。 真实环境本来就有噪声,要用分位数、分组和趋势判断。
- 误区:只采首页就够。 关键业务路径都要采,例如搜索、详情、结算和表单提交页。
- 追问:为什么 Core Web Vitals 常看 p75? p75 能覆盖大多数用户体验,同时不会像 p95 那样过度受极端样本影响。
- 追问:Lab 测试适合放在 CI 吗? 适合,但阈值要考虑波动,通常配合多次运行或容忍区间。
- 追问:RUM 如何保护隐私? 不采集敏感内容,只采指标、页面类型、设备网络分组,并控制采样率。
八、加强记忆
RUM 看真实世界,Lab 看可重复实验。排查性能时先用 RUM 发现真实问题,再用 Lab 和 DevTools 复现定位,最后上线后继续用 RUM 验证收益。