分析 (Analytics)
Next.js Speed Insights 允许您使用不同指标分析和测量页面性能。
您可以在 Vercel 部署 上零配置开始收集 真实体验评分 (Real Experience Score)。
本文档其余部分描述了 Next.js Speed Insights 使用的内置转发器。
自定义实现
首先,您需要创建一个 自定义 App 组件并定义 reportWebVitals
函数:
当页面上任何指标的最终值计算完成时,会触发此函数。您可以用它将结果记录到控制台或发送到特定端点。
函数返回的 metric
对象包含以下属性:
id
:当前页面加载上下文中指标的唯一标识符name
:指标名称startTime
:性能条目的首次记录时间戳(以毫秒为单位,如适用)value
:性能条目的值或持续时间(以毫秒为单位)label
:指标类型(web-vital
或custom
)
跟踪的指标分为两种类型:
- Web 核心指标 (Web Vitals)
- 自定义指标 (Custom metrics)
Web 核心指标
Web 核心指标 (Web Vitals) 是一组用于衡量网页用户体验的关键指标,包含以下内容:
- 首字节时间 (Time to First Byte) (TTFB)
- 首次内容绘制 (First Contentful Paint) (FCP)
- 最大内容绘制 (Largest Contentful Paint) (LCP)
- 首次输入延迟 (First Input Delay) (FID)
- 累积布局偏移 (Cumulative Layout Shift) (CLS)
- 下次绘制交互时间 (Interaction to Next Paint) (INP) (实验性)
您可以使用 web-vital
标签处理所有这些指标的结果:
也可以单独处理每个指标:
测量这些指标使用了第三方库 web-vitals。浏览器兼容性因具体指标而异,请参考浏览器支持部分了解支持的浏览器。
自定义指标
除了上述核心指标外,还有一些额外的自定义指标用于测量页面水合 (hydrate) 和渲染的时间:
Next.js-hydration
:页面开始和完成水合所需的时间(毫秒)Next.js-route-change-to-render
:路由变更后页面开始渲染所需的时间(毫秒)Next.js-render
:路由变更后页面完成渲染所需的时间(毫秒)
您可以使用 custom
标签处理所有这些指标的结果:
也可以单独处理每个指标:
这些指标在所有支持用户计时 API (User Timing API) 的浏览器中均可使用。
将结果发送到外部系统
通过转发函数,您可以将结果发送到任何端点以测量和跟踪网站上的真实用户性能。例如:
须知:如果使用 Google Analytics,利用
id
值可以手动构建指标分布(用于计算百分位数等)了解更多关于将结果发送到 Google Analytics 的信息。
TypeScript
如果使用 TypeScript,可以使用内置类型 NextWebVitalsMetric
: