Core Web Vitals:测量与优化以提升网页性能
你的网站加载了,但用户仍然跳出。缓慢的交互让访问者感到沮丧,搜索引擎也会注意到。Core Web Vitals 是 Google 用于衡量真实用户体验的指标:最大内容绘制(LCP)、交互到下次绘制(INP)和累积布局偏移(CLS)。在本指南中,我们将向你展示如何准确测量它们,并通过实用的代码级技术进行优化。
什么是 Core Web Vitals?
Core Web Vitals 是一组量化用户体验关键方面的指标:
- LCP 衡量加载性能。它标记最大内容元素(图片、文本块、视频)变得可见的时间。目标为 ≤ 2.5 秒。
- INP 衡量交互性。它跟踪所有交互(点击、轻触、按键)的延迟,并报告最差的一次。目标为 ≤ 200 毫秒。
- CLS 衡量视觉稳定性。它对加载过程中意外的布局偏移进行评分。目标为 ≤ 0.1。
这些指标是 Google 页面体验信号的一部分,但更重要的是,它们反映了真实用户的挫败感。优化它们对 SEO 和转化率都有好处。
如何测量 Core Web Vitals
你需要实验室数据和现场数据。实验室工具模拟条件;现场数据来自真实用户。
实验室工具
- Lighthouse(在 Chrome DevTools 或 CI 中)提供包含改进机会的快照。
- PageSpeed Insights 结合了实验室数据和来自 Chrome 用户体验报告(CrUX)的现场数据。
- WebPageTest 提供高级脚本和胶片视图。
现场工具
- Chrome UX Report (CrUX) 显示你源站的聚合真实用户数据。
- web-vitals 库让你从实际用户收集指标并发送到分析工具。
- Search Console 报告你网站的 Core Web Vitals 状态。
首先检查关键页面的 PageSpeed Insights。然后使用 web-vitals 库设置真实用户监控,以长期跟踪性能。
优化 LCP
LCP 通常是最具影响力的待修复指标。最大元素通常是主视觉图片或大文本块。
1. 优化关键路径
- 通过缓存、CDN 和高效的后端代码减少服务器响应时间(TTFB)。
- 消除渲染阻塞资源:内联关键 CSS,延迟非关键 CSS 和 JavaScript。
- 预加载 LCP 图片:
<link rel="preload" as="image" href="#">。
2. 优化图片
- 使用 WebP 或 AVIF 等现代格式。
- 使用
srcset和sizes提供响应式图片。 - 压缩图片而不产生可见的质量损失。如需快速压缩,试试我们的图片压缩器。
3. 改善服务器响应
- 使用 CDN 在全球缓存静态资源。
- 启用 Brotli 或 gzip 压缩。
- 优化数据库查询并使用服务器端缓存。
示例:为 LCP 图片预加载并设置 fetchpriority:
<link rel="preload" as="image" href="#" fetchpriority="high">
<img src="#" alt="Hero" width="1200" height="600" fetchpriority="high">
优化 INP
INP 衡量你的页面响应用户输入的速度。高 INP 意味着交互迟缓。
1. 拆分长任务
- 使用
setTimeout、requestIdleCallback或scheduler.yield让出主线程。 - 避免长时间运行的 JavaScript 函数;将它们拆分为更小的块。
2. 优化事件处理器
- 对频繁事件(滚动、调整大小、输入)进行防抖或节流。
- 对触摸和滚轮事件使用被动事件监听器。
- 尽量减少处理器内部的 DOM 更新。
3. 减少 JavaScript 执行
- 代码拆分并懒加载非关键 JavaScript。
- 移除未使用的依赖和 polyfill。
- 使用 web worker 进行繁重计算。
示例:在长任务中让出主线程:
async function processLargeArray(items) {
for (let i = 0; i < items.length; i++) {
// Process item
if (i % 50 === 0) {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
}
优化 CLS
CLS 衡量意外的布局偏移。常见原因:没有尺寸的图片、广告、嵌入内容和动态注入的内容。
1. 始终设置尺寸
- 在图片和视频上包含
width和height属性。 - 对响应式容器使用 CSS
aspect-ratio。
2. 为动态内容预留空间
- 为广告和嵌入内容使用占位符或骨架屏。
- 避免在现有内容上方插入内容,除非是响应用户交互。
3. 优化字体加载
- 使用
font-display: swap避免不可见文本,但要注意可能的布局偏移。 - 预加载关键字体以减少交换延迟。
示例:使用 aspect-ratio 预留空间:
.video-container {
aspect-ratio: 16 / 9;
width: 100%;
}
工具和工作流
将性能检查集成到你的开发工作流中:
- 在 CI 中运行 Lighthouse(例如 GitHub Actions)以捕获回归。
- 使用 web-vitals 库将现场数据发送到你的分析工具。
- 监控 CrUX 和 Search Console 以了解真实用户趋势。
- 在真实设备上测试,尤其是中端手机。
记住:性能是一项功能。像对待任何其他质量指标一样对待它。
常见问题
Core Web Vitals 当前的阈值是多少?
LCP:良好 ≤ 2.5 秒,需要改进 ≤ 4.0 秒。INP:良好 ≤ 200 毫秒,需要改进 ≤ 500 毫秒。CLS:良好 ≤ 0.1,需要改进 ≤ 0.25。这些阈值基于真实用户数据。
我应该多久测量一次 Core Web Vitals?
通过 CrUX 和你自己的 RUM 等工具持续监控现场数据。在每次重大代码更改时运行实验室测试,关键页面至少每月一次。
没有开发人员我能优化 Core Web Vitals 吗?
一些修复如图片压缩和缓存可以通过插件或 CDN 设置完成。然而,更深入的优化(代码拆分、关键 CSS)通常需要开发人员参与。
准备好优化图片以获得更好的 LCP 了吗?试试我们免费的图片压缩器,在不损失质量的情况下减小文件大小。