Core Web Vitals 只有三个数,但每个数背后都是一堆细节。LCP 看加载、CLS 看稳定、INP 看交互,按这个顺序修,12 步全部变绿。
每一步都有“怎么测 + 怎么改”,照着打勾就行。
核心结论
- ✓LCP < 2.5s:首屏最大元素说了算
- ✓CLS < 0.1:宽高预留消灭跳动
- ✓INP < 200ms:长任务拆分 + 事件委托
- ✓测量:实验室看方向,真机看结论
LCP 四步
- ·首图 preload,其他图片懒加载
- ·关键 CSS 内联,非关键延迟
- ·字体 swap + 预加载,不挡首次渲染
- ·HTML 边缘缓存,TTFB 先降下来
CLS 四步
- ·所有图片/视频写死宽高比
- ·广告位和嵌入框预留高度
- ·字体用 CSS 占位,避免 FOUT 跳动
- ·动态插入内容先占位再填充
INP 四步
- ·长任务拆成 50ms 内的小块
- ·列表用事件委托,别逐个绑
- ·输入框防抖,滚动监听节流
- ·第三方脚本全部延迟或按需加载
测量代码
用 PerformanceObserver 把三指标打到控制台,上线后接真实用户监控:
new PerformanceObserver((list) => {
for (const e of list.getEntries()) {
console.log(e.name, Math.round(e.startTime));
}
}).observe({ type: "largest-contentful-paint", buffered: true });上线前检查清单
- 01LCP 元素是否 preload
- 02图片视频是否有宽高
- 03长任务是否拆分
- 04第三方是否延迟
- 05真机复测是否全绿
常见问题
分数每天波动正常吗?
正常。看 28 天聚合,别盯单次分数。
INP 一直是灰色?
说明样本不足,等真实交互数据积累。
WebTagr 自己的成绩?
LCP 0.9s,同一套清单跑出来的,可对照抄。