PerformanceFrontend2024 Edition
Core Web Vitals
深度解析
Web Vitals 是 Google 提出的统一质量信号,旨在简化并量化影响用户体验的方方面面。 本文将带你从 LCP、INP、CLS 三大核心指标出发,逐层剖析整个前端性能指标体系。
Core Metrics Deep Dive
三大核心指标深度剖析
Supporting Metrics
其他重要指标
除了三大核心指标,还有几个关键的辅助指标帮助诊断性能瓶颈。
Measurement Tools
测量工具全景
性能优化始于精确的测量。了解实验室数据与真实用户数据 (RUM) 的区别至关重要。
Lab Data · 实验室数据
模拟环境测试
Lighthouse
Chrome 内置,综合审计评分 + 优化建议
CLI / DevToolsPageSpeed Insights
结合 Lighthouse + CrUX 真实数据
Web 工具WebPageTest
多地点、多设备的瀑布流分析
高级诊断Chrome DevTools
Performance 面板逐帧分析
开发者Field Data · 真实数据
用户真实体验
CrUX
Chrome 用户体验报告
web-vitals JS
npm 库,实时 RUM
GTMetrix
综合监控面板
Code Example
实战:接入 web-vitals
使用 web-vitals 库在应用中收集真实用户指标并上报。
lib/web-vitals.ts
import { onLCP, onINP, onCLS, onFCP, onTTFB } from "web-vitals";
type MetricPayload = {
name: string;
value: number;
rating: "good" | "needs-improvement" | "poor";
id: string;
delta: number;
navigationType: string;
};
function sendToAnalytics(metric: MetricPayload) {
// 上报到你的分析平台
const body = JSON.stringify({
...metric,
page: window.location.pathname,
userAgent: navigator.userAgent,
timestamp: Date.now(),
});
// 使用 sendBeacon 确保页面关闭前也能发送
if (navigator.sendBeacon) {
navigator.sendBeacon("/api/vitals", body);
} else {
fetch("/api/vitals", { body, method: "POST", keepalive: true });
}
}
export function initWebVitals() {
onLCP(sendToAnalytics); // 最大内容绘制
onINP(sendToAnalytics); // 交互到下一帧绘制
onCLS(sendToAnalytics); // 累计布局偏移
onFCP(sendToAnalytics); // 首次内容绘制
onTTFB(sendToAnalytics); // 首字节时间
}Optimization Checklist
性能优化全栈清单
性能即用户体验
记住核心目标:LCP ≤ 2.5s · INP ≤ 200ms · CLS ≤ 0.1。 持续监测、渐进优化、用数据驱动决策 —— 让每一毫秒都成为竞争优势。