当前位置: 首页 > news >正文

前端性能优化指标 + 检测工具

前端性能优化指标 + 检测工具

文章目录

  • 前端性能优化指标 + 检测工具
    • 整体概览
      • FCP(First Contentful Paint)
      • LCP(Largest Contentful Paint)
      • FID(First Input Delay)
      • TTI(Time to Interactive)
      • TBT(Total Block Time)
      • CLS(Cumulative Layout Shift)
      • 总结
    • 三大核心指标
    • 如何获取指标
      • web-vitals-extension
      • Lighthouse
      • Chrome DevTools
    • 首屏时间(FCP) VS 白屏时间(FP)
      • 白屏(First Paint)
        • 白屏时间计算
      • 首屏 (First Contentful Paint)
        • 首屏时间计算
      • 该计算首屏时间还是白屏时间?

整体概览

关键时间节点描述含义
TTFBtime to first byte(首字节时间)从请求到数据返回第一个字节所消耗时间
TTITime to Interactive(可交互时间)DOM树构建完毕,代表可以绑定事件
DCLDOMContentLoaded (事件耗时)当 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发
LonLoad (事件耗时)当依赖的资源全部加载完毕之后才会触发
FPFirst Paint(首次绘制)第一个像素点绘制到屏幕的时间
FCPFirst Contentful Paint(首次内容绘制)首次绘制任何文本,图像,非空白节点的时间
FMPFirst Meaningful paint(首次有意义绘制)首次有意义绘制是页面可用性的量度标准
LCPLargest Contentful Paint(最大内容绘制/渲染)viewport中最大的页面元素加载的时间
FIDFirst Input Delay(首次输入延迟)用户首次和页面交互(单击链接,点击按钮等)到页面响应交互的时间

FCP(First Contentful Paint)

首次内容绘制,浏览器首次绘制来自DOM的内容的时间,内容必须包括文本,图片,非白色的canvassvg,也包括带有正在加载中的web字体文本。这是用户第一次看到的内容。

FCP时间(秒)颜色编码FPC分数
0 - 2绿色(快)75 - 100
2 - 4橙色(中等)50 - 74
超过4红色(慢)0 - 49

LCP(Largest Contentful Paint)

最大内容绘制,可视区域中最大的内容元素呈现到屏幕上的时间,用以估算页面的主要内容对用户的可见时间。img图片,video元素的封面,通过url加载到的北京,文本节点等,为了提供更好的用户体验,网站应该在2.5s以内或者更短的时间最大内容绘制。

LCP时间(秒)颜色编码
0 - 2.5绿色(快)
2.5 - 4橙色(中等)
超过4红色(慢)

FID(First Input Delay)

首次输入延迟,从用户第一次与页面进行交互到浏览器实际能够响应该交互的时间,输入延迟是因为浏览器的主线程正忙于做其他事情,所以不能响应用户,发生这种情况的一个常见原因是浏览器正忙于解析和执行应用程序加载的大量计算的JavaScript

FID时间(毫秒)颜色编码
0 - 100绿色(快)
100 - 300橙色(中等)
超过300红色(慢)

TTI(Time to Interactive)

网页第一次完全达到可交互状态的时间点,浏览器已经可以持续的响应用户的输入,完全达到可交互的状态的时间是在最后一个长任务完成的时间,并且在随后的5s内网络和主线程是空闲的。从定义上来看,中文名称叫持续可交互时间或可流畅交互时间更合适。

TTI时间(秒)颜色编码
0 - 3.8绿色(快)
3.9 - 7.3橙色(中等)
超过7.3红色(慢)

TBT(Total Block Time)

总阻塞时间,度量了FCPTTI之间的总时间,在该时间范围内,主线程被阻塞足够长的时间以防止输入响应。只要存在长任务,该主线程就会被视为阻塞,该任务在主线程上运行超过50毫秒。

线程阻塞是因为浏览器无法中断正在进行的任务,因此如果用户确实在较长的任务中间与页面进行交互,则浏览器必须等待任务完成才能响应。

TBT时间(毫秒)颜色编码
0 - 300绿色(快)
300 - 600橙色(中等)
超过600红色(慢)

CLS(Cumulative Layout Shift)

累计布局位移,CLS会测量在页面整个生命周期中发生的每个意外的布局移位的所有单独布局移位分数的总和,他是一种保证页面的视觉稳定性从而提升用户体验的指标方案。

用人话来说就是当点击页面中的某个元素的时候,突然布局变了,手指点到了其它位置。比如想点击页面的链接,突然出现了一个banner。这种情况可能是因为尺寸未知的图像或者视频。

CLS时间(毫秒)颜色编码
0 - 0.1绿色(快)
0.1 - 0.25橙色(中等)
超过0.25红色(慢)

总结

根据以上 6 个指标,我们可以简单明确一下优化思路:

  • 尽快完成页面内容渲染
    • 尽快开始渲染(优化 FCP)
    • 尽快完成主要内容渲染(优化 LCP)
    • 尽快完成所有内容渲染(优化 Speed Index)
  • 减少长任务
    • 尽早执行长任务(优化 TTI)
    • 把长任务拆成小任务(优化 TBT)
  • 保证页面布局稳定(优化 CLS)

三大核心指标

Google 在20年五月提出了网站用户体验的三大核心指标,分别为:

  • LCP(Largest Contentful Paint / 最大内容绘制)
  • FID
  • CLS

LCP 代表了页面的速度指标,虽然还存在其他的一些体现速度的指标,但是 LCP 能体现的东西更多一些。一是指标实时更新,数据更精确,二是代表着页面最大元素的渲染时间,通常来说页面中最大元素的快速载入能让用户感觉性能还挺好。

FID 代表了页面的交互体验指标,毕竟没有一个用户希望触发交互以后页面的反馈很迟缓,交互响应的快会让用户觉得网页挺流畅。

CLS 代表了页面的稳定指标,尤其在手机上这个指标更为重要。因为手机屏幕挺小,CLS 值一大的话会让用户觉得页面体验做的很差。


如何获取指标

web-vitals-extension

官方出品,你可以通过安装 web-vitals-extension 插件来获取三大核心指标


Lighthouse

Chrome浏览器控制台自带


Chrome DevTools

打开 Performance 即可快速获取指标



首屏时间(FCP) VS 白屏时间(FP)

白屏(First Paint)

当浏览器开始渲染页面,白屏触发,这时候你如果设置了背景颜色的话,就可以看到页面出现了背景色。

白屏会在页面加载之前触发,在这段时间里,不会呈现任何内容和信息给用户。虽然背景色会很快完成绘制,但是实际的内容和交互可能要花很长的时间去加载,因此,白屏时间过长,会让用户认为我们的页面不能用或可用性差。可以通过适当调整页面结构,来优化网页。

白屏时间计算

在 head 标签开始加一段脚本,用于记录白屏开始时间,在 head 标签结束之前,加一段脚本,用于计算白屏时间,有些浏览器可以调用 Performance API 得出白屏结束时间,有些不支持,因此,计算方式分两种:

// 支持 Performance API
firstPaint =  firstPaintEnd - performance.timing.navigationStart;
// 不支持 Performance API,在 page onload 中计算结束时间 pageStartTime
firstPaint =  firstPaintEnd - pageStartTime;

首屏 (First Contentful Paint)

当页面绘制完第一个 DOM 内容,会触发首屏,这里的内容可以是文字、图片或者是 canvas。

首屏决定了网页的用户体验,因为它会标记实际内容何时加载到页面中,而不仅仅是标记页面的变化状态。因为关注的是内容,所以该指标可以了解用户何时收到消耗性信息,比如文本,视觉效果等,这比通过背景改变或样式改变对用户体验进行评估更有用。

首屏时间计算

首屏时间的计算需要用到两个变量,一个是首屏开始,一个是首屏结束,首屏开始也是白屏结束的时间,因此可以用以上方法计算出来,首屏结束时间应该是页面的第一屏绘制完,但是这个我们不好定义,我们知道在一个页面中,图片资源往往是比较后加载完的,因此可以统计首屏加载最慢的图片是否加载完成,加载完了,记录结束时间.

// 计算首屏加载最慢的图片是否加载完成
const img = new Image();
img.src = src;
img.onload = () => {
  firstPaintContentEnd = Date.now();
};

const onload = () => {
  firstPaintContentStart = Date.now();
}

firstPaintContent = firstPaintContentEnd - firstPaintContentStart;

该计算首屏时间还是白屏时间?

在评估页面是否开始渲染方面,首屏时间会比白屏时间更精确,但是二者的结束时间往往很接近。所以要根据自己的业务场景去决定到底该用哪种计算方式。

  • 对于交互性比较少的简单网页,由于加载比较快,所以二者区别不大,因此,可以根据喜好任选一种计算方式。
  • 对于大型的复杂页面,你会发现由于需要处理更多复杂的元素,白屏时间和首屏时间相隔比较远,这时候,计算首屏时间会更有用。

参考文章:

首屏时间(FCP) VS 白屏时间(FP)

前端性能优化指标 + 检测工具

相关文章:

  • CubeMx笔记 --pwm输出+输入捕获
  • 轻松玩转树莓派Pico之一、新手上路
  • 目前我国网络安全人才市场状况
  • Redis源码解读之用RedisAe实现一个简单的HTTP服务器
  • 【极简python】第一章 print与变量
  • HAL库与Cubemx\rt-thread Nano系列教程-01-新建HAL工程及移植RT-Nano到Alios Developer Kit
  • 论文阅读_知识蒸馏_MobileBERT
  • No2.搭建基本的资源端解析token(资源服务端)
  • Vue入门【四】-- 事件机制与双向数据绑定
  • 小型超市管理系统的设计与实现 毕业设计-附源码011136
  • R语言缺失时间序列的填充:补齐时间序列数据中所有缺失的时间索引、使用na.locf函数将缺失值NA替换为前序时刻最近的值
  • 26.STM32 SPI通信接口
  • [JS] node.js 入门
  • 卸载mysq并重新安装教程
  • 合并后 ETH 的供应变化以及是否会出现通缩
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【个人向】《HTTP图解》阅后小结
  • 2017-08-04 前端日报
  • 2017届校招提前批面试回顾
  • 4个实用的微服务测试策略
  • CSS实用技巧干货
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • exif信息对照
  • Kibana配置logstash,报表一体化
  • Linux各目录及每个目录的详细介绍
  • passportjs 源码分析
  • Python爬虫--- 1.3 BS4库的解析器
  • React-flux杂记
  • React-redux的原理以及使用
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 反思总结然后整装待发
  • 缓存与缓冲
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 在Mac OS X上安装 Ruby运行环境
  • const的用法,特别是用在函数前面与后面的区别
  • MyCAT水平分库
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # include “ “ 和 # include < >两者的区别
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)JPA - JQPL 实现增删改查
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net 8.0 新的变化
  • .NET Remoting学习笔记(三)信道
  • .NET 反射 Reflect
  • .NET4.0并行计算技术基础(1)