performanceobserver可原生捕获真实用户lcp、fid、cls:lcp监听'largest-contentful-paint'并累加starttime,fid监听'first-input'取starttime,cls监听'layout-shift'累加value且需过滤hadrecentinput为false的条目,三者均须在中尽早注册并启用buffered:true。

怎么用 PerformanceObserver 捕获真实用户 LCP、FID、CLS
浏览器原生支持 Core Web Vitals 的指标采集,不需要第三方 SDK 就能拿到真实用户数据。关键在于用 PerformanceObserver 监听 largest-contentful-paint、layout-shift、first-input 这三类 entry 类型。
注意:LCP 和 CLS 是持续上报的(比如页面滚动后可能触发新 LCP),FID 只发生一次且不可直接观测——必须监听 first-input 并在回调里立即记录 entry.startTime,否则后续无法还原。
-
PerformanceObserver必须在中尽早初始化,越晚注册越容易漏掉首屏指标 - CLS 需要累积计算:每次
layout-shiftentry 的value要累加到全局变量,不能只取最后一次 - FID 的
processingStart不可靠,应使用startTime作为用户首次交互时间点
为什么 web-vitals npm 包比手写 PerformanceObserver 更稳妥
Google 官方 web-vitals 库不是“锦上添花”,而是绕过浏览器兼容性坑的刚需工具。比如 Safari 15.4–16.3 对 layout-shift 的 hadRecentInput 字段返回 undefined,导致 CLS 误算;Chrome 110+ 修改了 FID 的判定逻辑,手写代码容易沿用旧规则。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 该包自动降级:不支持
first-input的老浏览器会 fallback 到event.timeStamp+performance.now()估算 - 内置 CLS 过滤:自动忽略用户交互后的 layout shift(如点击菜单展开导致的位移)
- 暴露
attribution字段:能定位到具体 DOM 元素(比如哪个图片拖慢了 LCP),纯原生 API 不提供这个信息
如何把指标发往自建监控服务而不被浏览器拦截
用 sendBeacon() 是唯一可靠方式。XHR 或 fetch() 在页面卸载时大概率被终止,尤其在 iOS Safari 上几乎必然失败。
- 数据必须是
POST请求体,且 Content-Type 设为text/plain(sendBeacon()不支持application/json) - 建议将多个指标打包成一行 JSON 字符串再传,例如:
{"lcp":2345,"cls":0.12,"fid":18,"url":"/home"} - 不要在
visibilitychange事件里调用sendBeacon():iOS Safari 会静默丢弃,应改用pagehide
CLS 在单页应用(SPA)中为什么总归零或突增
CLS 计算依赖页面生命周期,而 SPA 的路由切换不会触发完整重排。默认情况下,PerformanceObserver 不会重置 CLS 累计值,导致从首页跳转到详情页后,CLS 继续叠加——这不是 bug,是设计如此。
- 必须在路由变更时手动调用
performance.clearMarks()和重置 CLS 累加器(web-vitals库的onCLS回调带reset参数可解决) - Vue/React 路由守卫中清理前一页的 CLS 数据,否则用户反复切页会让 CLS 越来越大
- 某些 UI 库(如 Ant Design)的 Modal 或 Tooltip 插入 body 导致 layout shift,这类 shift 属于合法交互反馈,应通过
entry.hadRecentInput === true过滤掉
真实场景里最常被忽略的是 CLS 的生命周期管理——它不像 LCP 或 FID 那样有明确“结束点”,需要你主动划分测量区间。SPA、动态广告插入、A/B 测试组件加载,都会让 CLS 行为变得非线性。别只盯着数字,先确认你在测哪一段“用户感知的稳定性”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










