技术分享|前端性能 关键性能指标以及测量工具介绍

58cad600acfae48ea86f8a32d936bd20.png

4ac8f1d51a790a2b5315fd00b201238b.png

源宝导读:对于一款商业软件产品而言,其性能表现往往会直接关系到它的生死存亡,这种说法一点也不夸张,数据显示,40%的人放弃了加载时间超过3秒的网站。但是一个网页的加载时间,响应时间的“快”“慢”衡量方式却因人而异,难以测量。现在我们来介绍一些,客观专业的,可以衡量的前端性能关键指标以及测量工具。

一、关键性能指标以及说明

首先是一组软件性能对用户影响的调研数据:

  •  40%的人放弃了加载时间超过3秒的网站

  •  47%的消费者希望在2秒或更短的时间内完成网页加载

  •  页面响应时间,每延迟1秒就可以使转化率降低7%

  •  当页面加载时间从1秒增加到3秒时,跳出的概率增加32%

再来一组软件性能对收益影响的调研数据:

  • Google搜索延迟400ms导致搜索量下降 0.59%

  • Bing 延迟 2s导致收入下降 4.3%

  • Yahoo 延迟 400ms导致流量下降 5-9%

这些直观的数字,深刻地反映了软件性能对一款产品能否成功应用的重要影响,所以我们一定要认真对待。

既然我们已经知道了性能的重要性,那如何进行科学的描述与表达呢?在日常的一些交流中,我们通常使用的是一些定性的、感性的表达,例如:

  • 首屏加载速度

  • 用户操作网页时的响应速度

  • 网页响应用户时的流畅速度

但是这些无法量化,因人而异,无法测量,现在我们来介绍一些,客观专业的,可以衡量的指标。

1、FCP(First Contentful Paint)

顾名思义,FCP是衡量某个页面,从开始加载到页面中第一个元素被渲染之间的时间(元素包含文本、图片、canvas等)。

这个指标常用来衡量白屏的时间,性能指标如下表所示:


fast

moderate

slow

FCP time(s)

0-2

2-4

>4

往往很多页面会在页面准备进行JS加载之前,加入Loading或者骨架图,给用户更好的体验。

但是其实这并非是用户真正想要看到的内容,如何衡量用户真正想看到内容呢,我们来看看第二个指标。

2、LCP(Largest Contentful Paint) (核心指标之一)

LCP是用来衡量标准视口内可见的最大内容元素的渲染时间(元素包括img、video、div及其他块级元素)。

这个指标常常用来衡量用户感知的加载时间,LCP的指标性能如下表所示:


fast

moderate

slow

LCP time(s)

0-2.5

2.5-4

>4

我们通过一张图来了解一下FCP和LCP的关系

8f87e242c06220e7452d6d8bf1610e31.png

在我们日常的项目中,FCP和LCP尝尝用来审视页面首屏加载速度。

但是页面不仅只是展现首屏, 我们还会进行操作和交互,接下来我们介绍几个指标 TTI,FID,TBT,来反应页面加载到操作时的流畅速度和响应速度。

3、TTI(Time to Interactive)

TTI是用来测量页面所有资源加载成功并能够可靠地快速响应用户输入的时间。

他的意义很好理解,但是他的测量方式就会比较麻烦,必须要满足以下几个条件:

  1. 从 FCP 指标后开始计算

  2. 持续 5 秒内无长任务(执行时间超过 50 ms)且无两个以上正在进行中的 GET 请求

  3. 往前回溯至 5 秒前的最后一个长任务结束的时间


4、FID(First Input Delay) (核心指标之一)

FID是测量从用户第一次与页面交互的时间到浏览器实际上能够响应这种交互的时间。交互包括用户点击一个链接或者一个按钮等。

这个指标比较好理解,用户交互事件触发到页面响应中间耗费了多长时间,这个指标也就是我们说的响应速度和流畅速度。


fast

moderate

slow

FID time(ms)

<100ms

100-300ms

>300ms

5、TBT(Total Blocking Time)

TBT其实也是字面意思,衡量从FCP到TTI之间主线程被阻塞时长的总和。

但是大家可能会有疑问,因为JS本身是单线程的,什么才是被阻塞呢?

其实在我们介绍TTI的时候已经介绍过,JS有一个长任务的概念,我们把执行时间>50ms的任务称为长任务,那么每个任务超过50ms的部分就是他的阻塞时间。

TBT就是阻塞时间的总和,举例子,如果在FCP和TTI之间进行了3个长任务,分别为 60ms 100ms 200ms

那么我们TBT 则等于 (60-50)+(100-50)+(200-50) = 210 ms

这个指标并非直接体现性能,但是他是我们去优化FID的重要依据。

我们现在了解和如何评估页面的加载速度,响应速度和流程程度。

但是大家在开发过程中可能还会有一种情况,比如:

  • 页面内容已经加载完,但是样式还没有加载完成,那么等待样式加载完成,会出现文档"跳跃"的情况。

  • 图片没有设置宽度和高度,当图片比较大的时候,图片突然加载后,整个页面也会出现布局的"波动"

  • 这样的"波动"和"跳跃"其实都显示的是页面的不稳定,所以我们再来了解一个指标:CLS

6、CLS(Cumulative Layout Shift)(关键指标)

CLS代表着累计位移偏移,记录了页面上非预期的位移波动,主要通过位移影响的面积和位移距离来计算。

比如页面渲染过程中突然插入一张巨大的图片导致其他元素发生偏移等,这个也是相当影响用户体验的内容。

ae3580217f0200bee8502a325fba9f8e.png

如上图所示,我们计算方式是

移动距离 = 20% 

影响面积 = 45% 前后总共影响的屏幕面积

那么 CLS 为  0.2 * 0.45 = 0.09

CLS的指标如下表所示:


GOOD

NEEDS
IMPROVEMENT

POOR

CLS number

<0.1

0.1-0.25

>0.25

到这里我们已经了解了很多指标

  • 如何去衡量页面加载速度:FCP、LCP

  • 如何去衡量页面的操作流畅度:FID、TTI、TBT

  • 如何去衡量页面的视觉稳定程度:CLS

但是在我们日常的关注性能的时候,只需要死磕最重要的三个核心指标,他们往往是影响页面感知性能的最关键点。

fa8082e89b5da89466fea45183da541d.png

二、常见指标检测工具及使用方法简介

1、通过谷歌浏览器的Performance来录制页面的指标

69552cc57a2add3d9c777dd044ec0ad2.png

我们的老朋友,Chrome的DevTools

我们切换到Performace中,点击左上角的就可以开始录制。

但是值的注意是的,因为目前电脑的CPU和手机的CPU还是无法比较。

当我们想要去录制手机性能时,需要点击配置,把CPU降速4倍(选择4x slowdown)才可以更好模拟手机的运行效果,这样我们可以不被电脑的"高性能"蒙骗。

2、重要的性能优化好帮手:Lighthouse

同样谷歌DevTools自带Lighthouse 可以快速生成一个报告。

但是也更加推荐使用 lighthouse 使用NPM安装并且通过命令行生成。

通过命令行生成的有2个好出,一是可以把每次报告保存下来,二是可以自动化定期检测性能和发现问题。

通过Lighthouse生成出来的报告如下图:

2620626facee8ff0d142cde85496e955.png

不仅仅可以给出详细的报告,并且还给了非常多的优化建议和优化路径,这个也是我们做性能优化的最重要的工具

c1081db8dd011cf9c667903ce2c5a3f5.png

最重要的是Lighthouse 给出的所有建议,都非常重要和直观。

3、如果你希望在JS中获取这些指标

你可以使用:web-vitals

e6e406733e84b09093f1a20bc4fe9c17.png

这样我们可以自己去获取每个用户在真实情况中的指标,并且上报到服务端记录下来,作为我们性能优化的依据和素材。


4、在线化报告生成,更加接近真机效果  www.webpagetest.org

webpagetest可以生成详细的报告,也可以自己部署镜像去生成,并且所有的手机端是在真机下运行的。

6815699f6211b6226726f9d9af64c8d4.png

也有非常详细的指标甚至整个渲染过程的视频

f4b5ace1fe5a577d0f842a105ef9aa3a.png

相比Lighthouse 那么webpagetest则更像是辅助你分析性能的工具,可以展现给你所有的数据,等待着你去挖掘如何优化。

不过因为webpagetest是在线化的,所以在使用的时候需要科学上网,在高峰时期甚至还需要排队生成报告。


三、总结

针对商业软件产品而言,其性能表现往往会直接关系到它的生死存亡。

本次我们了解了性能优化的常见指标,以及他们的计算方式,同时我们也推荐了如何用工具去获得这些指标。

这些指标相当于是前端性能优化系列的入门课程,在后续的分享中,会分享如何优化这些指标已经如何在项目中落地。

小伙伴们是否等不及用这个工具去测试一下自己产品的前端性能呢。‍

------ END ------

作者简介

刘同学: 开发SM,目前负责数据分析平台相关开发工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELKstack-Elasticsearch各类安装部署方法

手动安装部署Elasticsearch 开篇 开篇闲话&#xff0c;如果是新人在接触ELKstack什么都不懂的情况下&#xff0c;可以先看看各位前人写的关于ELKstack的博客&#xff0c;如何对ELKstack部署安装及使用&#xff0c;但是别人的东西只能作为借鉴&#xff0c;在自己搭建使用一定要以…

美国超人气漫画科普书!85%以上中学物理考点,5岁孩子秒懂物理

▲ 点击查看今年的高考&#xff0c;不得不说&#xff0c;一度被浙江学霸刷屏&#xff01;他总分720分&#xff0c;物理等3门满分的成绩&#xff0c;最终获得“浙江高考状元”。状元能摘得桂冠&#xff0c;除了日积月累的不断努力外&#xff0c;最重要的是&#xff0c;不断调整自…

gevent 学习笔记一

import geventdef a():print a starting....gevent.sleep(1)print a endingdef b():print b starting....gevent.sleep(1)print b endinggevent.joinall([gevent.spawn(a), gevent.spawn(b) ]) 结果显示&#xff0c;用gevent并不会因为gevent.sleep而造成阻塞,但用内置的time.s…

当前联机日志损坏恢复

2019独角兽企业重金招聘Python工程师标准>>> 环境模拟 删除状态为active的联机日志&#xff0c;然后强行关闭数据库 处理过程 SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1260720 bytes Variable Size 1426071…

权威杂志评选出的十个最伟大的公式,爱因斯坦的质能方程竟然只能排第六!简直神仙打架....

全世界只有3.14 % 的人关注了爆炸吧知识难决高下各有千秋当数学家得出方程式和公式&#xff0c;如同看到雕像&#xff0c;美丽的风景&#xff0c;听到优美的曲调等等一样而得到充分的快乐。——柯普宁公式&#xff0c;是数学世界中一道美丽的风景&#xff0c;一个小小的等式&am…

在Idea中测试各JVM语言的交互性

为什么80%的码农都做不了架构师&#xff1f;>>> 背景&#xff1a; 假设出现这样的场景&#xff0c;一个Java项目中&#xff0c;需要用其他语言来编写相关模块&#xff0c;但需要能被Java调用 测试工具&#xff1a;Idea12 测试语言&#xff1a;Groovy、Scala、Ko…

android pcm调节音量,调整PCM语音数据的音量

通过编程实现调整PCM的音量&#xff0c;具体做法是乘上一个固定的数&#xff0c;但是要考虑数据的溢出问题&#xff0c;代码如下&#xff1a;//调节PCM数据音量//comment : 对PCM数据的音量进行放大//parameter :// pData PCM数据// nLen PCM数据的长度// nBitsPerSample 每个S…

.NET 大会今日开幕 |这些白嫖福利不看肠子都悔青

{ 12.18 线上开幕 文末有福利 }2021 .NET 开发者大会&#xff0c;今日开幕你是否已经满怀期待&#xff0c;同时又有很多疑问“ 会场在哪里&#xff1f;” "哪些大咖会参加&#xff1f;"“ 技术主题有哪些&#xff1f;” “ 什么时间有福利&#xff1f;”…时间不多了…

asp.net web常用控件FileUpload(文件上传控件)

2019独角兽企业重金招聘Python工程师标准>>> FileUpload控件的主要中能&#xff1a;向指定目录上传文件&#xff0c;该控件包括一个文本框和一个浏览按钮。 常用的属性&#xff1a;FileBytes&#xff0c;FileContent、FileName、HasFile、PostedFile。 常用的方法&a…

设计模式:面向对象的设计原则下(ISP、DIP、KISS、YAGNI、DRY、LOD)

本文继续来介绍接口隔离原则&#xff08;ISP&#xff09;和依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;这两个原则都和接口和继承有关。文章最后会简单介绍几个除了 SOLID 原则之外的原则。接口隔离原则&#xff08;ISP&#xff09;提起接口&#xff0c;开发人员的第…

ADB server didn't ACK

当我们通过eclipse开发Android应用时&#xff0c;会连接真机会使用模拟器进行仿真&#xff0c;有时候启动失败&#xff0c;会提示这样的错误。 工具/原料 Eclipse CMD命令窗口 方法/步骤 首先通过CMD启动adb服务。这个时候会提示启动失败。 服务启动失败的原因有很多&#xff0…

android方块密码输入框,Android仿微信/支付宝的方块密码输入框

在用到支付类或者验证类app时&#xff0c;都有一个简密的输入框。百度了下有个不错的帖子点击打开链接不过自己也写了个简单的类似的。不废话了。没图说个席八。懒得运行&#xff0c;直接截layout.xml的效果图先。布局文件android:layout_width"fill_parent"android:…

童鞋,[HttpClient发送文件的技术实践]请查收

昨天有童鞋在群里面问&#xff1a;怎么使用HttpClient发送文件&#xff1f;01荒腔走板之前我写了一个《ABP小试牛刀之上传文件》&#xff0c;主要体现的是服务端&#xff0c;上传文件的动作是由前端小姐姐完成的&#xff0c; 我还真没有用HttpClient编程方式发送过文件。不过Ht…

elasticsearch2.2之javaApi

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;elasticsearch虽然自带rest接口&#xff0c;但是在真正使用过程中可能更多的是通过不同编程语言的客户端进行交互。 因为代码里有或多或少的注释&#xff0c;所以直接贴代码&#xff1a; package elasti…

《程序员的职业素养》读书笔记

书籍地址&#xff1a;http://book.douban.com/subject/11614538/ 一句话点评该书&#xff1a;Bob大叔的职业生涯经验总结&#xff0c;现身说法&#xff0c;可信可敬&#xff01; &#xff08;一&#xff09;专业主义 &#xff08;1&#xff09;“专业主义”就意味着担当责…

html 转义反斜杠字符串,JS中处理单个反斜杠(即转义字符的处理)

问题来源&#xff1a;在表单的标签中对输入的字符串进行大写转换。一不小心输入了反斜杠 \如下图所示&#xff1a;输入 chn\ 的时候&#xff0c;在 IE8 下弹出一个js错误。(在实际的项目的表单元素中遇到了&#xff0c;单独这样拿出来测试的时候又不弹出错误。也很是焦灼)索…

C# 值得永久收藏的WPF项目实战(经典)

01—简介之前也写过好多篇CM框架相关的项目实战文章&#xff0c;比如&#xff1a;C# WPF框架Caliburn.Micro快速搭建C# WPF框架Caliburn.Micro入门实例1C# WPF MVVM项目实战(进阶①)C# WPF MVVM项目实战(进阶②)C# WPF MVVM模式下在主窗体显示子窗体并获取结果C# WPF Caliburn.…

InfoQ十周年:不忘初心,继续前行

我们都知道&#xff1a;软件正在改变世界&#xff0c;也已经看到了在加快这种变化时&#xff0c;于软件世界中我们的影响力。在这种热情下&#xff0c;10年前我们带着一些不寻常的信念与情怀创建了InfoQ&#xff1a;\\\\t我们相信&#xff1a;这个社区需要的内容是开发者所撰写…