← 返回题目列表

前端性能监控应该采集哪些数据?

高频 中等 第 5 / 29 题 更新于 2026/07/28
性能优化性能监控RUMWeb Vitals

简化版

前端性能监控要采集真实用户的 LCP、INP、CLS 等体验结果,并用 Navigation/Resource Timing、长任务、接口和错误补充原因;每条数据必须带页面模板、release、设备、网络和采样上下文。分析以 P75 等分位数和分群为主,建立发布对比、告警、定位、修复与验证闭环。

详细版

实验室数据环境可控,适合复现和看 trace;RUM 覆盖真实设备、网络、缓存状态和交互,适合评价分布。二者互补,不能拿 Lighthouse 单次分数替代现场 Core Web Vitals。

当前 Core Web Vitals 良好阈值是 P75 LCP ≤2.5s、INP ≤200ms、CLS ≤0.1。还应采集 TTFB/FCP、LCP 元素与四段归因、交互归因、资源耗时/失败、API、Long Task、JS 错误和业务关键阶段。

监控 SDK 必须控制采样、批量、发送时机、字段基数和隐私,不能收集输入内容或完整敏感 URL。版本号与 source map 关联后,指标劣化才能定位到发布。

完整版教学

一、监控要同时回答结果、原因和上下文

只知道 LCP=4 秒,无法判断是 HTML、图片还是主线程慢;只知道 hero.jpg 下载 1 秒,也不知道用户主内容是否受影响。成熟数据模型要把体验指标和诊断属性关联。

层次数据例子回答的问题
结果LCP、INP、CLS用户体验多差
原因TTFB、资源、长任务时间花在哪里
上下文页面、release、设备谁在什么条件下出问题

记忆钩子:没有上下文的指标不能定位,没有结果指标的耗时不能证明影响用户。

二、核心指标与当前评价口径

LCP 衡量加载主内容,INP 衡量页面生命周期内交互响应,CLS 衡量非预期布局偏移。当前良好阈值分别是 2.5 秒、200 毫秒和 0.1,并按页面或站点真实访问的第 75 百分位评价。

Good: LCP ≤ 2500ms, INP ≤ 200ms, CLS ≤ 0.1
Poor: LCP > 4000ms, INP > 500ms, CLS > 0.25

FCP、TTFB 仍有诊断价值,但不属于当前三个 Core Web Vitals。指标集合会演进,SDK 与看板要记录定义和库版本,避免历史曲线因计算方式变化而误判。

三、为什么分位数比平均值更适合体验

平均值会把快慢用户混在一起,也可能被极端值拉动。P75 表示排序后 75% 的观测不超过该值,能关注较慢用户同时保持统计稳定。

假设 100 次访问中前 74 次 LCP 都是 1.5 秒,第 75 次为 3.1 秒,后 25 次为 5 秒;平均约 2.4 秒,看似良好,但 P75 已是 3.1 秒,未达到 LCP 良好阈值。评价口径必须在 SQL、看板和告警中一致。

样本少时分位数抖动大。新页面只有 20 次访问,P75 的统计置信度不足,应设置最小样本、滚动窗口并避免因一次访问自动回滚。

四、浏览器 API 能提供哪些诊断数据

Navigation Timing 提供文档导航阶段,Resource Timing 提供资源发起、响应和传输等信息,PerformanceObserver 可订阅多类 performance entry。跨源资源若未通过相应 Timing-Allow-Origin 暴露,很多详细阶段会被限制。

const observer = new PerformanceObserver(list => {
  for (const entry of list.getEntries()) queueMetric(entry)
})
observer.observe({ type: 'resource', buffered: true })

Web Vitals 的边界和交互归因较复杂,生产中常优先使用维护中的官方库而非自行拼凑。自研仍需处理 bfcache、页面隐藏、SPA 路由和重复上报等生命周期问题。

五、采样、上报与 SDK 自身成本

全量上传每个资源会造成高数据量和 SDK 开销。核心结果可高采样,详细 trace 低采样;发生错误或指标异常时可提升诊断采样,但要防止偏差。

假设日活 100 万、每次会话 80 条资源记录、每条压缩后 300 字节,全量原始上报约 1,000,000×80×300≈24GB/日,还未计协议开销。按会话 5% 采样可降到约 1.2GB/日,但统计时必须带采样率权重。

上报应批量、限制队列,页面隐藏时可用适合卸载阶段的发送方式,但仍不能保证 100% 到达。监控 SDK 失败不能阻塞业务,第三方脚本也要纳入自身性能预算。

六、分群、告警和发布闭环

全站 P75 正常可能掩盖某个结算页或低端 Android 的严重问题。至少按页面模板、设备等级、网络、地区、浏览器和 release 分群,同时控制高基数字段,避免每个完整 URL 都成为独立维度。

发现:release R42 移动端 LCP +35%

定位:商品页 image load delay 增加 700ms

修复:恢复 HTML 中的 Hero URL 与优先级

验证:同分群 P75 回到基线

告警要比较稳定基线、绝对阈值、相对变化和最小样本。只以“超过 2.5 秒”报警会对长期已差页面持续轰炸,也可能漏掉从 1.0 秒退化到 2.4 秒的大幅回归。

隐私上不采集输入文本、token 和完整查询参数,对 URL、用户标识和堆栈做脱敏与留存控制。性能监控不是绕过数据合规的理由。

七、常见误区与追问

  • 误区:Lighthouse 分数就是线上用户体验。 它是特定实验环境的综合结果,RUM 才覆盖真实分布。
  • 误区:平均 LCP 小于 2.5 秒就达到 Core Web Vitals 良好。 官方评价使用 P75,不是平均值。
  • 误区:采集越多越容易定位。 高基数、噪声和 SDK 成本会损害系统与业务,需要分层采样。
  • 追问:为什么 Resource Timing 看不到跨域详细耗时? 跨源资源需通过 Timing-Allow-Origin 等机制授权暴露。
  • 追问:SPA 如何区分路由性能? 定义软导航边界、业务 mark 和路由上下文,并避免重复累计页面级指标。
  • 追问:性能告警如何减少误报? 结合基线、阈值、样本量、持续窗口和版本变化,而非单点触发。
  • 追问:监控 SDK 怎样避免成为性能问题? 异步、批量、采样、限队列、失败隔离,并测量自身字节和主线程成本。

八、加强记忆

用“结果、原因、上下文、分位数、闭环”设计 RUM:核心 Web Vitals描述用户结果,导航/资源/长任务提供原因,页面与 release 等上下文支持分群;P75 与最小样本保证评价口径,采样和隐私控制成本;最终每次异常都能从发布发现、定位到同分群验证修复,而不是停在看板上。