Google Core Web Vitals(核心网页指标)

Core Web Vitals(CWV)是 Google 推出的一组用于衡量网页用户体验的关键性能指标,目前由 ‌LCP、INP 和 CLS‌ 三大核心指标构成。‌FID 已于 2024 年 3 月被 INP 正式取代‌,不再作为核心指标使用 ‌。

一、核心三大指标(LCP/INP/CLS)

1. LCP(Largest Contentful Paint,最大内容绘制)‌

  • ‌含义‌:衡量页面中最大可见内容元素(如主图、大标题、视频等)渲染完成的时间,反映用户感知的"主要内容加载完成"时刻。
  • ‌目标‌:‌≤ 2.5 秒‌ ‌。
  • ‌优化建议‌:
    • 使用 WebP/AVIF 格式压缩图片;
    • 预加载关键资源(<link rel="preload">);
    • 启用 CDN 加速资源分发;
    • 优化服务器响应时间(TTFB < 800ms)‌。

‌2. INP(Interaction to Next Paint,交互到下一次绘制)‌

  • ‌含义‌:测量用户与页面交互(点击、按键、触摸等)后,浏览器完成下一次屏幕绘制的延迟,‌取代 FID 成为新的交互性核心指标‌。
  • ‌目标‌:‌< 200 毫秒‌ ‌。
  • ‌优化建议‌:
    • 拆分长任务(避免主线程阻塞 > 50ms);
    • 使用 Web Worker 处理复杂计算;
    • 优化事件处理函数,避免耗时操作;
    • 采用事件节流/防抖、被动事件监听器 ‌。
      ⚠️ 注意:FID(首次输入延迟)仅测量‌首次交互‌的输入延迟,而 INP 覆盖‌所有交互‌并包含处理与绘制延迟,因此更全面‌。

‌3. CLS(Cumulative Layout Shift,累积布局偏移)‌

  • ‌含义‌:衡量页面加载过程中所有‌意外布局偏移‌的总得分,反映视觉稳定性。
  • ‌目标‌:‌≤ 0.1‌ ‌。
  • ‌优化建议‌:
    • 为图片、视频等元素指定宽高属性;
    • 避免动态插入内容(如广告、横幅)导致布局跳动;
    • 使用 transform 实现动画而非修改布局属性 。

补充说明

  • ‌FID 已淘汰‌:虽在部分旧资料中仍被提及,但 Google 官方已明确 INP 为新一代交互性指标 ‌89。
  • ‌工具推荐‌:
    • Lighthouse(Chrome DevTools 内置)
    • PageSpeed Insights
    • Web Vitals Chrome 扩展
      如需检测当前网站的 Core Web Vitals 表现,可直接使用上述工具进行分析。

二、基础关键指标(TTFB/FCP)

这两个指标是上述核心指标的基础,直接影响首屏加载速度。
1. TTFB (Time to First Byte) - 首字节时间

  • 含义: 浏览器发出请求到收到服务器第一个字节的时间。它反映了服务器的响应速度、网络延迟和 DNS 查询时间。
  • 目标: < 800 毫秒(理想情况 < 600ms)。
  • 如何优化:
    • 使用服务端渲染 (SSR) 或静态站点生成 (SSG)。
    • 开启服务器缓存(如 Redis)和 CDN 缓存。
    • 优化数据库查询,减少后端处理时间。

2. FCP (First Contentful Paint) - 首次内容绘制

  • 含义: 浏览器渲染出第一个内容(文本、图片、SVG 等,非白屏)的时间。它给用户"页面开始加载"的视觉反馈。
  • 目标: < 1.8 秒。
  • 如何优化:
    • 内联关键 CSS (Critical CSS)(直接绑定在 html 上的,不用等待下载解析css文件),移除未使用的 CSS(很多项目引入了庞大的 CSS 框架(如 Bootstrap, Tailwind)或第三方库,但实际页面可能只用了其中 10% 的类名。这些"死代码"不仅浪费带宽,还增加了浏览器的解析负担。)。
    • 减少 JavaScript 对主线程的阻塞(使用 async 或 defer 加载脚本)。
    • 优化服务器响应时间(即优化 TTFB)。

三、其他重要性能指标

1. TTI (Time to Interactive) - 可交互时间

  • 含义:衡量页面从开始加载到完全具备交互能力所需的时间。它不仅要求页面内容已渲染,还要求主线程足够空闲,能够可靠、快速地响应用户的下一步操作。
  • 目标:通常建议 < 5 秒
  • 为什么重要: 一个页面可能看起来已经加载完毕(FCP/LCP 已完成),但如果主线程仍被 JavaScript 长任务阻塞,用户点击按钮时可能没有任何反应。TTI 就是用来衡量这种"假死"状态的时长。
  • 如何优化:
    • TTI 关注的是页面何时变得完全可交互,优化核心是尽快让主线程空闲下来。
    • 代码分割与懒加载:将 JavaScript 代码按路由或组件进行拆分,只加载当前页面所需的代码。
    • 延迟加载非关键脚本:对分析、广告等第三方脚本使用 async 或 defer,或延迟到用户交互后再加载。
    • 减少主线程工作:与优化 INP 类似,通过拆分长任务、使用 Web Worker 等方式减少主线程的负担。

2.TBT(总阻塞时间)‌:作为实验室指标,用于估算主线程被长任务(>50ms)阻塞的总时长,是 FID 的替代指标

指标汇总:

指标 衡量维度 核心定义 理想阈值
LCP(Largest Contentful Paint) 加载速度 最大内容绘制 ≤ 2.5 秒
INP(Interaction to Next Paint) 交互响应 交互到下一次绘制 ≤ 200 毫秒
CLS(Cumulative Layout Shift) 视觉稳定性 累积布局偏移 ≤ 0.1
FCP (First Contentful Paint) 加载速度 首次内容绘制 ≤ 2.5 秒
TTFB (Time to First Byte) 加载速度 首字节时间 < 800 毫秒
TTI (Time to Interactive) 加载速度 可交互时间 < 5秒
TBT 加载速度 总阻塞时间 < 200ms
相关推荐
IT_陈寒2 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰2 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
竹林8183 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12274 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪4 小时前
Vue3-生命周期
前端
莪_幻尘5 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4535 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅5 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端
kyriewen6 小时前
别再每次都 Google 了:我整理了前端日常最常踩的 10 个 Git 坑,附速查表
前端·javascript·git