源宝导读:对于一款商业软件产品而言,其性能表现往往会直接关系到它的生死存亡,这种说法一点也不夸张,数据显示,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的关系

在我们日常的项目中,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代表着累计位移偏移,记录了页面上非预期的位移波动,主要通过位移影响的面积和位移距离来计算。

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

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

移动距离 = 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

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

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

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

我们的老朋友,Chrome的DevTools

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

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

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

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

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

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

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

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

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

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

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

你可以使用:web-vitals

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

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

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

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

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

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

三、总结

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

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

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

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

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

作者简介

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

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

  1. 谷歌测试工程师分享前端性能监控利器Performance

    最近在写一个监控脚本,终于有机会接触到了这一块,整理后写下了本文. Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到 ...

  2. 技术分享:OpenStack Magnum社区及项目介绍

    今天主要跟大家简单介绍下Magnum社区和Magnum项目的一些介绍.Magnum到现在为止,功能做的其实不是很多,希望通过这次机会能和大家多多讨论下,看看怎样让Magnum提供更好的容器服务. 1. ...

  3. 【华为云技术分享】GeminiDB for Cassandra 流功能介绍

    1      使用GeminiDB for Cassandra流捕获表活动 1.1      功能介绍 当存储在GeminiDB for Cassandra集群中某张表的某项目发生变更时,其他的程序能 ...

  4. web前端性能意义、关注重点、测试方案、优化技巧

    1.前段性能的意义 对于访问一个网站,最花费时间的并不是后端应用程序处理以及数据库等消耗的时间,而是前端花费的时间(包括请求.网络传输.页面加载.渲染等).根据web优化的黄金法则: 80%的最终用户 ...

  5. 【华为云技术分享】前端工程师必备:从浏览器的渲染到性能优化

    摘要:本文主要讲谈及浏览器的渲染原理.流程以及相关的性能问题. 问题前瞻 1. 为什么css需要放在头部?2. js为什么要放在body后面?3. 图片的加载和渲染会阻塞页面DOM构建吗?4. dom ...

  6. 【技术分享】Go 工程化-前端性能监控接入层 Layout 设计实践

    作者:黎志航&张翔,腾讯监控高级工程师 前言 本文主要介绍 腾讯云前端性能监控(RUM)在全新接入层上的 Go 工程化实践,介绍 Go 项目布局(下文称 Project Layout)的设计理 ...

  7. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  8. py获取前端的参数_鹅厂技术说 | 深入理解前端性能监控

    作者系 腾讯新闻前端团队 大鹏哥,本文已得到授权. 导语:在同样的网络环境下,有两个同样能满足你的需求的网站,一个唰的一下就加载出来了,另一个白屏转圈转了半天内容才出来,如果让你选择,你会用哪一个? ...

  9. 硬核干货:葡萄城 SpreadJS 前端表格技术分享

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 表格作为数据呈现的一种基本方式,在各类软件系统都发挥着重要的作用.在移动互联时代,即便再复杂的数据通过&qu ...

最新文章

  1. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
  2. 电子文件归档为什么非云不可
  3. 儿子转眼就长大:Hinton、LeCun、Bengio 口述神经网络简史
  4. 深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型
  5. IAR STM32工程报错Error[Pe020]: identifier “GPIO_Pin_0”is undefined D:\STM32F103_Demo\App\main.c
  6. spring注解工具类AnnotatedElementUtils和AnnotationUtils
  7. Docker安装Mysql(docker-compose.yml)
  8. Oracle 客户端 PLSQL 12.0.7 安装、数据导出、Oracle 执行/解释计划
  9. Rust:trait中 关联类型、泛型参数、默认参数混用
  10. 3dsMax中Vray渲染器材质参数使用及5种材质展示
  11. linux,centos部署wekan项目管理平台
  12. 深度学习:卷积神经网络从入门到精通
  13. Hasor-RSF —— 分布式服务框架
  14. 大都会人寿线下培训第三天回顾
  15. cocos2d-x的初步学习七
  16. 归置归置,我的 2022
  17. [转] linux操作系统下c语言编程入门
  18. GAMES101作业6及课程总结(重点解决SAH扩展作业)
  19. DIV布局——化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页
  20. JS计算字符串所占字节数占用储存大小

热门文章

  1. linux installaccess Nessus-5.2.4
  2. 算法61---两个字符串的最小ASCII删除和【动态规划】
  3. 剑指offer编程题Java实现——面试题3二维数组中的查找
  4. Android SDK 目录说明
  5. System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。...
  6. 三:Java之Applet
  7. [再寄小读者之数学篇](2014-11-14 矩阵的应用: 多项式)
  8. 数据结构C#版笔记--堆栈(Stack)
  9. SmartPart事件
  10. 如何使Flash在Internet Explorer的64位版本中工作