性能优化相关的文章其实网上挺多,可是大部分都是在讲如何优化性能,也就是讲方法论。可是在实际工做中,如何量化性能优化也是至关重要的一环。今天本文会介绍谷歌提倡的七个用户体验指标(也能够认为是性能指标),每一个指标分别根据如下几点讲解:前端
首次绘制,FP(First Paint),这个指标用于记录页面第一次绘制像素的时间。git
首次内容绘制,FCP(First Contentful Paint),这个指标用于记录页面首次绘制文本、图片、非空白 Canvas 或 SVG 的时间。github
这两个指标看起来大同小异,可是 FP 发生的时间必定小于等于 FCP,以下图是掘金的指标:web
FP 指的是绘制像素,好比说页面的背景色是灰色的,那么在显示灰色背景时就记录下了 FP 指标。可是此时 DOM 内容还没开始绘制,可能须要文件下载、解析等过程,只有当 DOM 内容发生变化才会触发,好比说渲染出了一段文字,此时就会记录下 FCP 指标。所以说咱们能够把这两个指标认为是和白屏时间相关的指标,因此确定是最快越好。chrome
上图是官方推荐的时间区间,也就是说若是 FP 及 FCP 两指标在 2 秒内完成的话咱们的页面就算体验优秀。后端
最大内容绘制,LCP(Largest Contentful Paint),用于记录视窗内最大的元素绘制的时间,该时间会随着页面渲染变化而变化,由于页面中的最大元素在渲染过程当中可能会发生改变,另外该指标会在用户第一次交互后中止记录。指标变化以下图:浏览器
LCP 其实能比前两个指标更能体现一个页面的性能好坏程度,由于这个指标会持续更新。举个例子:当页面出现骨架屏或者 Loading 动画时 FCP 其实已经被记录下来了,可是此时用户但愿看到的内容其实并未呈现,咱们更想知道的是页面主要的内容是什么时候呈现出来的。缓存
此时 LCP 指标是可以帮助咱们实现想要的需求的。性能优化
上图是官方推荐的时间区间,在 2.5 秒内表示体验优秀。微信
首次可交互时间,TTI(Time to Interactive)。这个指标计算过程略微复杂,它须要知足如下几个条件
这里你可能会疑问为何长任务须要定义为 50ms 之外?
Google 提出了一个 RAIL 模型:
对于用户交互(好比点击事件),推荐的响应时间是 100ms 之内。那么为了达成这个目标,推荐在空闲时间里执行任务不超过 50ms(W3C 也有这样的标准规定),这样能在用户无感知的状况下响应用户的交互,不然就会形成延迟感。
长任务也会在 FID 及 TBT 指标中使用到。
所以这是一个很重要的用户体验指标,表明着页面什么时候真正进入可用的状态。毕竟光内容渲染的快也不够,还要能迅速响应用户的交互。想必你们应该体验过某些网站,虽然内容渲染出来了,可是响应交互很卡顿,只能过一会才能流畅交互的状况。
首次输入延迟,FID(First Input Delay),记录在 FCP 和 TTI 之间用户首次与页面交互时响应的延迟。
这个指标其实挺好理解,就是看用户交互事件触发到页面响应中间耗时多少,若是其中有长任务发生的话那么势必会形成响应时间变长。
其实在上文咱们就讲过 Google 推荐响应用户交互在 100ms 之内:
阻塞总时间,TBT(Total Blocking Time),记录在 FCP 到 TTI 之间全部长任务的阻塞时间总和。
假如说在 FCP 到 TTI 之间页面总共执行了如下长任务(执行时间大于 50ms)及短任务(执行时间低于 50ms)
那么每一个长任务的阻塞时间就等于它所执行的总时间减去 50ms
因此对于上图的状况来讲,TBT 总共等于 345ms。
这个指标的高低其实也影响了 TTI 的高低,或者说和长任务相关的几个指标都有关联性。
累计位移偏移,CLS(Cumulative Layout Shift),记录了页面上非预期的位移波动。
你们想必遇到过这类状况:页面渲染过程当中忽然插入一张巨大的图片或者说点击了某个按钮忽然动态插入了一块内容等等至关影响用户体验的网站。这个指标就是为这种状况而生的,计算方式为:位移影响的面积 * 位移距离。
以上图为例,文本移动了 25% 的屏幕高度距离(位移距离),位移先后影响了 75% 的屏幕高度面积(位移影响的面积),那么 CLS 为 0.25 * 0.75 = 0.1875
。
CLS 推荐值为低于 0.1,越低说明页面跳来跳去的状况就越少,用户体验越好。毕竟不多有人喜欢阅读或者交互过程当中网页忽然动态插入 DOM 的状况,好比说插入广告~
介绍完了全部的指标,接下来咱们来了解哪些是用户体验三大核心指标、如何获取相应的指标数据及如何优化。
Google 在今年五月提出了网站用户体验的三大核心指标,分别为:
LCP 表明了页面的速度指标,虽然还存在其余的一些体现速度的指标,可是上文也说过 LCP 能体现的东西更多一些。一是指标实时更新,数据更精确,二是表明着页面最大元素的渲染时间,一般来讲页面中最大元素的快速载入能让用户感受性能还挺好。
FID 表明了页面的交互体验指标,毕竟没有一个用户但愿触发交互之后页面的反馈很迟缓,交互响应的快会让用户以为网页挺流畅。
CLS 表明了页面的稳定指标,尤为在手机上这个指标更为重要。由于手机屏幕挺小,CLS 值一大的话会让用户以为页面体验作的不好。
你能够经过安装 Lighthouse 插件来获取以下指标
官方出品,你能够经过安装 web-vitals-extension 插件来获取三大核心指标
官方出品,你能够经过安装 web-vitals 包来获取以下指标
代码使用方式也挺简单:
import {getCLS, getFID, getLCP} from 'web-vitals';
getCLS(console.log); getFID(console.log); getLCP(console.log); 复制代码
这个工具就很少作介绍了,打开 Performance 便可快速获取以下指标
该项措施能够帮助咱们优化 FP、FCP、LCP 指标。
dns-prefetch
预解析 DNS 的 IP 地址
preconnect
,以便预先进行 IP 解析、TCP 握手、TLS 握手
该项措施能够帮助咱们优化 FP、FCP、LCP 指标。
这块内容大多可让后端或者运维帮你去配置,升级至最新的网络协议一般能让你网站加载的更快。
好比说使用 HTTP2.0 协议、TLS 1.3 协议或者直接拥抱 QUIC 协议~
该项措施能够帮助咱们优化 TTI、FID、TBT 指标。
该项措施能够帮助咱们优化 CLS 指标。
以上是笔者对于用户体验指标的一些内容整理,若是有不懂的或者错误的地方欢迎指正及交流。
推荐关注个人微信公众号【前端真好玩】,工做日推送高质量文章。
笔者就任于酷家乐,家装设计行业独角兽。一流的可视化、前端技术团队,有兴趣的能够简历投递至 zx597813039@gmail.com
本文使用 mdnice 排版
- END -