新一代性能指标 Web Vitals

点击上方 三分钟学前端,关注公众号

回复交流,加入前端编程面试算法每日一题群

面试官也在看的前端面试资料

新一代性能指标 Web Vitals

什么是 Web Vitals ?

Web Vitals,即 Google 给的定义是一个良好网站的基本指标(Essential metrics for a healthy site)

上面我们已经介绍了很多指标,为什么 Google 还要再去定义一个新的指标集

这是因为,在过去要去衡量一个高质量网站,需要的指标太多,且有些指标计算很复杂,所以,Google 推出 Web Vitals 就是为了简化这个过程,用户仅仅需要关注 Web Vitals 即可。

在 Web Vitals 中,Core Web Vitals 是最核心的,它包含以下三个指标:

  • LCP (Largest Contentful Paint):最大内容绘制时间,用来衡量加载体验,谷歌要求LCP最好在页面首次开始加载后的2.5秒内发生;

  • FID (First Input Delay):首次输入延迟时间,用于衡量页面交互性,谷歌要求页面的FID最好小于100毫秒;

  • CLS (Cumulative Layout Shift):累计布局位移,用于衡量视觉稳定性,谷歌要求页面的CLS最好保持小于0.1。

下面我们详细介绍各大核心指标以及测量工具

三大核心指标

LCP:衡量加载体验

Largest Contentful Paint,最大内容绘制,用于记录视窗内最大的元素绘制的时间,该时间会随着页面渲染变化而变化,因为页面中的最大元素在渲染过程中可能会发生改变,另外该指标会在用户第一次交互后停止记录。

指标变化如下图:

LCP 比 FP、FCP、FMP 更能体现一个页面的性能好坏程度,因为这个指标会持续更新。举个例子:当页面出现骨架屏或者 Loading 动画时 FCP 其实已经被记录下来了,但此时页面内容其实并未呈现

在 2.5 秒内表示体验优秀

LCP 目前并不会计算所有元素,因为这样会使这个指标变得非常复杂,它现在只关注下面的元素:

  • <img> 元素

  • <image>元素内的<svg>元素

  • <video> 元素

  • 通过 url() 函数加载背景图片的元素

  • 包含文本节点或其他内联文本元素子级的块级元素。

FID:衡量页面交互性

First Input Delay,首次输入延迟,用于记录用户首次与页面交互时响应的延迟,即从用户首次与页面进行交互(即当他们单击链接、按钮、输入框等)到浏览器实际上能够响应该交互之间的时间

FID 在 FCP 和 TTI 之间,这个阶段页面已经部分呈现,但还不具备完全可持续交互的状态,如果其中有长任务发生的话那么势必会造成响应时间变长

Google 推荐响应用户交互在 100ms 以内:

CLS:衡量视觉稳定性

Cumulative Layout Shift,累积布局偏移,是一个重要的、以用户为中心的衡量视觉稳定性的指标,因为它有助于量化用户体验意外布局位移的频率,低 CLS 有助于确保页面令人愉快。

在使用 app 时,我们经常会遇到这样的问题,当我们点击一个按钮或其他操作时,或将页面滑动到某一位置时,突然文本或按钮没有任何警告的移动,这对于用户来说体验是非常糟糕的

为什么会发生这种毫无预警的移动喃?主要是因为页面可能使用某些异步或 DOM 元素加载资源,或者动态将某些元素添加到页面上,或者具有未知维度的图像或视频,或者默认字体大小与后面真实呈现的字体不匹配、或者是动态调整大小的第三方广告或窗口小部件等等。

因此谷歌在 Core Web Vitals 中用 CLS 来衡量页面的累积布局偏移,偏移越大,得分越低。

其他Web Vitals

除了核心之外,还有其他类型的 Web Vitals,当然这些一般都是核心的补充,为一些特定的场景提供服务。

例如,Time to First Byte (TTFB) 和 First Contentful Paint (FCP) 都是关于加载性能的,两者都有助于诊断 LCP  (缓慢的服务端响应,或者渲染阻塞的资源)。

同上,Total Blocking Time (TBT) 和 Time to Interactive (TTI) 则是影响 FID 的实验性指标,他们不属于核心,因为不能测试现场数据,不能反映用户为核心的关键结果。

如何测量

web-vitals(npm包)

Google 提供了一个小而美 npm 包:web-vitals

Chrome 插件

Google 总共在六种工具上新增了 Web Vitals 的衡量功能,如下图所示:

其中 TBT (Total Blocking Time) 总阻止时间其实和 FID 很相关。TBT 越短越好,TBT 越长,首次输入时恰好在阻止时间段的可能性越大, FID 可能更长

其中 web-vitals-extension 是 Google 提供一个新的插件,如果你是新手,建议使用它

create-react-app

在最近的 create-react-app 脚手架已经包含 web-vitals,主要代码是:

const reportWebVitals = onPerfEntry => {
  if (onPerfEntry && onPerfEntry instanceof Function) {
    // 引入一个 web-vitals 的库
    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
      getCLS(onPerfEntry);
      getFID(onPerfEntry);
      getFCP(onPerfEntry);
      getLCP(onPerfEntry);
      getTTFB(onPerfEntry);
    });
  }
};
export default reportWebVitals;

如果你要测量任何受支持的指标,只需将函数传递到 index.js 中的 reportWebvitals 函数中:

reportWebVitals(console.log);

当指标的最终值在页面上完成计算时,将触发此函数。我们就可以通过它将结果记录到控制台或发送到特定端点

总结

本文重点介绍了Core Web Vitals,Google 等平台对 Web Vitals 的重视以及作出的努力,让性能优化指标不再像之前那么难以理解与测量,极大的方便了研发人员

参考链接
  • https://web.dev/vitals/

  • SEJ

最后

欢迎关注「三分钟学前端」,回复「交流」自动加入前端三分钟进阶群,每日一道编程算法面试题(含解答),助力你成为更优秀的前端开发!

号内回复:

网络」,自动获取三分钟学前端网络篇小书(90+页)

JS」,自动获取三分钟学前端 JS 篇小书(120+页)

算法」,自动获取 github 2.9k+ 的前端算法小书

面试」,自动获取 github 23.2k+ 的前端面试小书

简历」,自动获取程序员系列的 120 套模版

》》面试官也在看的前端面试资料《《

“在看和转发”就是最大的

<think>嗯,用户问的是前端前沿的新技术,我得先回想一下最近前端领域有哪些比较热门的发展。首先,Vue、React、Angular这些主流框架肯定还在不断更新,比如React的Server Components和Vue的Vapor模式。然后是构建工具,Vite现在很流行,可能还有新的变化。 接下来,前端框架方面,SolidJS和Qwik可能算比较新的,它们强调性能优化,特别是Qwik的延迟加载概念。还有像Astro这样的元框架,专注于静态生成和部分水合,可能也是前沿的一部分。 状态管理库的话,Zustand和Jotai这些轻量级库最近挺受欢迎的,不过用户可能更想知道最新的,比如Signia或者其他的。 Web性能优化方面,核心网页指标(Core Web Vitals)是Google强调的,可能涉及到优化CLS、LCP、FID这些指标的技术。还有像Partial Hydration、Islands架构,Astro和Fresh框架用的比较多。 WebAssembly也是一个重要方向,尤其是与Rust结合使用,比如在前端处理高性能计算任务。不过用户可能更关注具体应用案例,比如Figma使用WebAssembly的例子。 CSS方面,新特性像容器查询、层叠式布局、CSS Houdini这些可能属于前沿。还有工具类框架如Tailwind CSS的更新,比如支持动态值或者新的插件。 构建工具方面,除了Vite,Turbopack和Rspack这些基于Rust的工具可能越来越受关注,因为它们提供了更快的构建速度。 TypeScript的持续发展,比如5.0版本的新特性,装饰器、satisfies操作符等,可能也是开发者需要关注的。 跨平台技术的话,Tauri作为Electron的替代,用Rust构建更轻量级的应用。还有React Native的新架构,可能也是重点。 AI在前端的应用,比如用机器学习库TensorFlow.js或者结合ChatGPT做智能组件,这部分可能比较新,但需要谨慎举例,避免夸大。 Web3和区块链方面,虽然热度有所下降,但像ethers.jsweb3.js这样的库还是存在,可能有些项目在用。 另外,微前端架构继续发展,比如Module Federation的应用,可能大公司在用,但可能不算最新技术了。 需要检查是否有遗漏,比如Playwright作为测试工具,或者新的浏览器API如View Transition API,WebGPU这些。还有HTMX这种强调HTML扩展的库,虽然不算全新但最近受到关注。 要确保提到的技术确实是前沿,不是已经普及的。比如React Server Components虽然还在演进,但已经有一段时间了。可能需要区分哪些是已经稳定,哪些是新兴的。 最后,组织这些内容,按类别分点,确保用户能清晰理解每个技术的用途和现状。同时避免使用Markdown,用自然的中文表达,保持口语化但信息准确。</think>当前前端技术发展迅速,以下是一些前沿方向和技术概览,按应用场景分类整理: 一、框架与运行时 1. **React Server Components (RSC)** 支持服务端/客户端组件混合渲染,2023年Next.js 13+已集成。特点: - 服务端组件零bundle体积 - 自动代码分割 - 支持异步数据获取 2. **Qwik** 由Builder.io团队开发,核心特性: - 延迟加载(Resumability) - 极快首屏加载速度(<1kb JS启动) - 基于细粒度响应式更新 3. **Astro 3.0** 岛屿架构(Islands Architecture)代表: - 默认SSG+选择性客户端水合 - 支持React/Vue/Solid等多框架组件 - 新增View Transitions API支持 二、构建工具链 1. **Turbopack** (Vercel) Rust编写的增量打包工具,比Webpack快700倍 - 与Next.js深度集成 - 支持React Server Components 2. **Bun** 全栈JavaScript运行时(替代Node.js): - 内置打包/转译/测试功能 - Zig语言开发,启动速度快10倍 - 兼容Node.js/npm生态 三、CSS新生态 1. **CSS Nesting** 原生支持嵌套语法(Chrome 112+): ```css .parent { & .child { color: red } } ``` 2. **CSS Houdini** 底层API开放: - Paint API:自定义绘制 - Layout API:自定义布局 - Animation Worklet:高性能动画 四、浏览器新能力 1. **WebGPU** 新一代图形API: -WebGL性能提升3-5倍 - 支持通用计算(GPGPU) - Chrome 113+已支持 2. **View Transitions API** 原生页面过渡动画: ```js document.startViewTransition(() => { updateDOM(); }); ``` 五、新兴开发范式 1. **TypeScript 5.0+** - `satisfies`操作符 - 装饰器标准化 - 模块解析优化 2. **状态管理** - **Jotai**:原子化状态 - **Signia**:细粒度响应式 - **Valtio**:Proxy驱动 六、性能优化方向 1. **Core Web Vitals**优化 - INP取代FID(2024年3月生效) - 字体加载优化(`size-adjust`属性) - 图片优化(AVIF格式普及) 2. **Partial Hydration** 按需激活组件: ```jsx import dynamic from 'next/dynamic'; const HydrateOnVisible = dynamic(() => import('./Component'), { ssr: false, loading: () => <Skeleton /> }); ``` 七、跨平台方案 1. **Tauri 2.0** 构建桌面应用: - 比Electron包体积小10倍 - 系统WebView渲染 - Rust后端支持 2. **Capacitor 5.0** 混合移动应用: - 支持最新Android/iOS API - 实时热更新 - 插件生态丰富 八、AI工程化 1. **LLM集成** - 智能表单验证(利用GPT-4) - 内容自动生成(@ai-jsx等框架) - 代码生成(GitHub Copilot) 2. **TensorFlow.js新特性** - WebGL加速推理 - 预训练模型仓库 - 浏览器端模型微调 建议实践路径: 1. 先掌握React/Vue等主流框架生态 2. 学习Vite/Turbopack现代构建工具 3. 深入TypeScript类型系统 4. 尝试WebGPU/WebAssembly高性能场景 5. 关注Chrome官方博客获取API更新 当前技术迭代周期约6-12个月,建议保持技术雷达扫描,但避免过度追逐新概念,重点选择与业务场景匹配的技术方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值