【web】【性能优化】前端性能指标

举报
huahua.Dr 发表于 2023/11/10 00:49:12 2023/11/10
【摘要】 常见的web性能问题有:大数据性能问题和代码层面问题。本质上,前端的性能问题都是渲染性能问题,当然,引起渲染性能损耗的可能是对渲染原理的不懂,也可能是我们写了不好的代码。但是归根结底,我们还是要掌握浏览器渲染原理,才能写出符合起原理的好代码。我们从引起性能损耗的原因出发对性能问题进行分类:加载性能问题渲染性能问题内存性能问题: 指由于程序内存占用过多而被耗尽导致的性能问题,由于代码使用不当导...

常见的web性能问题有:大数据性能问题和代码层面问题。

本质上,前端的性能问题都是渲染性能问题,当然,引起渲染性能损耗的可能是对渲染原理的不懂,也可能是我们写了不好的代码。但是归根结底,我们还是要掌握浏览器渲染原理,才能写出符合起原理的好代码。

我们从引起性能损耗的原因出发对性能问题进行分类:

  • 加载性能问题

  • 渲染性能问题

  • 内存性能问题: 指由于程序内存占用过多而被耗尽导致的性能问题,由于代码使用不当导致内存泄露的问题

  • 算法性能问题: 是指代码设计上没有考虑到运算的复杂度,导致的计算资源占用过多(一般指CPU计算资源)带来的问题。

  • 设计性能问题:由于架构、处理办法等的设计不足,带来的整体性的性能问题,例如整体层面设计了缓存与未使用之间的差异,例如模块代码分层组织与结构混乱之间的差异。

一、前端性能指标原则

原则

说明

第一次原则

指用户在第一次打开应用时,以更快的速率获得自己想要的内容。

持续性原则

指在用户使用应用过程中,没有卡顿的获得自己想要的内容。

 

二、常见的性能指标

 

性能指标

说明

First Contentful Paint (FCP)

第一次内容绘制,也就是指用户从打开应用到肉眼可以看到界面上第一次呈现出内容的时间。这里的内容可以上任何界面呈现,文本、图片、视频等等。

通过FCP这个指标,可以反映用户对应用打开速度的感知程度。FCP越小,说明用户能够感知你的应用打开速度更快,对你的应用竖起大拇指。

Largest Contentful Paint(LCP)

最大块内容首次绘制,也就是从你的应用打开,到全部内容加载完成之前,这一段时间里面,界面上最大的一块内容在什么时间点上被完整渲染出来。LCP是一个动态的评价过程,因为当界面没有加载完之前,你也说不准到底哪一块才是界面上最大的一块内容。

LCP从另外一个角度去评价了应用的打开速度,因为即使FCP很快,但如果LCP慢的话,仍然意味着你的应用体验不佳。

 

First Input Delay(FID)

第一次输入延迟,即用户第一次在界面上进行操作(例如点击某个链接)到程序对这个操作做出回应的延迟。这是因为经常我们的应用需要通过网络请求脚本或数据来进行渲染,而在请求的过程中,我们的程序或者浏览器本身,无法响应用户的操作,这个无法响应的过程,就是FID。例如某些点击我们通过脚本中的事件监听来处理,但是此时脚本还在加载过程中,所以点击就没有任何效果。图中,黄色条代表主线程中正在执行的某个任务,如果用户在这个任务的执行过程中进行了某次输入,那么浏览器是无法响应的,它必须等到这个任务结束才能响应。

FID 只关注来自离散操作的输入事件,如单击事件、按键事件, 像滚动和缩放这样的连续交互动作是不考虑的。

FID实际上反映了你的应用从打开之后阻塞用户进行交互的时间,因此是一个非常重要的负面指标。

 

Time to Interactive(TTI)

“达到可稳定交互的时间”,假如你不做任何输入,让应用自己打开,知道整个应用没有发生任何动作(静默状态)持续5秒钟,那么在这5秒钟之前的那一次长任务的结束时间,就是TTI。下图中黄条是长任务,和FID示意图中的黄条意思相同。当加载达到稳定静默状态(没有黄条)5秒钟后,往前找到最后一个长任务的结束时间,这个时间就是TTI

Total Blocking Time(TBT)

“总阻塞时长”,长任务执行会阻塞界面的渲染,有的卡顿明显,有的不明显,在FCPTTI之间,这些长任务的阻塞时长的总和,就是TBT。下图中黄红块就是长任务,红色就是阻塞时长,红色部分的总和就是TBT

Cumulative Layout Shift(CLS)

“累计布局偏移”,它是一个比值。在应用界面加载过程中,可见元素在前后两帧之间存在布局上的偏移,那么认为这个元素是不稳定的,比如用户准备用鼠标去点这个元素,结果点击点时候,这个元素被另外一个元素顶开了,导致点错了元素。CLS就是收集一段时间内这些偏移的数据。它的初衷是衡量页面元素在布局层面的稳定性,如果你的应用元素在布局上跑来跑去,体验当然是不好的。

Frame Per Second(FPS)

“每秒帧数”,它是一个速度指标“帧率”,即在每秒内刷新了多少帧。我们都知道浏览器会根据应用的变化来按照一定的帧率刷新页面,但是浏览器的刷新和电脑屏幕的刷新是两件事,电脑屏幕按照固定的刷新率进行刷新,而浏览器则是按照一定的(不稳定的)频率进行整个可视窗口的绘制。浏览器的绘制受多方面的影响,理论上在没有任何影响下,浏览器的帧率60Hz,即16.6ms左右一帧,但是由于浏览器执行时存在一些资源调度逻辑,需要等某些执行任务完成之后,才能进入下一帧刷新,这也就导致了丢帧现象,我们都知道人肉眼可辨为0.1s每帧,超过这个时长就会感觉卡顿,所以通过FPS指标来衡量应用的性能也是非常重要的。

 

三、实际性能分析(以浏览器分析)

我们可以借助chrome浏览器自带的devtool可视工具进行诊断。其中主要用到PerformanceLighthous两个面板工具。

1Performance面板提供应用运行过程中的时间切面,是动态的实时的快照收集。下图中也帮我们把各种性能指标的耗时都标出来了。Performance面板基于时间线timeline对应用运行过程进行了切面汇总,创造性的绘制了一张火焰图,通过这张火焰图,可以直接定位到哪一段代码运行了特别长时间

 

2Lighthouse则是一个基于谷歌评价指标的全站评测工具,其中不仅包含了性能指标,还包含了其他指标,我们可以只关注其中的性能指标,通过lighthouse,我们可以获得对自己网站的一份评测报告。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。