前端性能指标的介绍

前言
被问到优化性能的方式有哪些,会被提到合并文件,压缩资源等,但是对于性能的衡量标准,各执一词;衡量标准有很多,本文讲介绍最具有代表性,使用最广泛的几种性能代表。

页面加载过程

要了解性能指标,就要先了解页面加载的过程,对浏览器加载页面进行了解


该图中详细阐述了浏览器加载页面时触发的所有行为(钩子)的流程

按照时间顺序概述:

  • 浏览器本地行为

1.Prompt for unload:提示卸载。打开新页面的瞬间,准备卸载之前页面(如果有的话)的 document。这之后马上记录下时间作为 navigationStart

  1. redirect(unload):重定向,若发生网络重定向直接跳至 DNS 解析,若发生本地重定向,查找本地强制缓存资源。同时卸载之前页面,回收内存。
  2. App cache:读取本地缓存,减少网络 IO 开销(有缓存直接跳至 Processing)
  • 网络行为
  1. DNS:没有缓存,走网络,DNS 解析找到对应的 IP。DNS 解析发送的是 UDP 包。
  2. TCP:建立 TCP 连接
  3. Request:HTTP 通信
  4. Response:服务器响应
  • 浏览器本地行为
  1. Processing:浏览器解析 DOM,处理一系列响应、渲染行为。详见渲染机制
  2. onLoad:加载完成。

性能指的是什么

我们都听说过性能的重要性。但当我们谈起性能,以及让网站"速度提升"时,我们具体指的是什么?

其实性能是相对的:

  • 某个网站可能对一个用户来说速度很快(网速快,设备强大的情况下),但可能对另一个用户来说速度很慢(网速慢,设备低端的情况下)。
  • 两个网站完成加载所需的时间或许相同,但其中一个却显得加载速度更快(如果该网站逐步加载内容,而不是等到最后才一起显示)。
  • 一个网站可能看起来加载速度很快,但随后对用户交互的响应速度却很慢(或根本无响应)。

因此,在谈论性能时,重要的是做到精确,并且根据能够进行定量测量的客观标准来论及性能。这些标准就是指标。

指标的类型

  • Perceived load speed 感知加载速度:页面在屏幕上加载并渲染出所有视觉元素的速度。
  • Load responsiveness 加载响应度:为了使组件对用户交互作出快速响应,页面加载和执行任何所需 JavaScript 代码的速度。
  • Runtime responsiveness 运行时响应度:页面在加载后,对用户交互的响应速度。
  • Visual stability 视觉稳定性:页面上的元素是否会出现让用户感到意外的偏移,并对用户交互造成潜在的干扰?
  • Smoothness 平滑度:过渡和动画在页面状态切换的过程中是否具有稳定的帧速率和顺滑的流动性

性能指标的介绍

渲染过程

  • FP(FirstPaint)首次绘制
    页面从开始加载到页面第一次绘制任何像素的时间
  • First Contentful Paint (FCP)首次内容绘制
    页面从开始加载到页面内容的任何部分在屏幕上完成渲染的时间(渲染DOM的内容的时间)

    现象:白屏和绘制背景色的时间
    时间过长的原因:资源加载太慢,比如 js、字体文件等
  • Largest Contentful Paint (LCP)最大内容绘制
    页面从开始加载到最大文本块或图像元素在屏幕上完胜渲染的时间;如果元素在屏幕外面,或者如果元素被overflow裁剪了,这些部分不计算入LCP的元素尺寸

    时间过长的原因:css和js阻塞了dom的渲染,最大元素中的资源加载慢
  • First Screen Paint (FSP)内容全部呈现的时间

    时间过长的原因:资源加载慢,js执行时间过长等
  • Speed Index (SI)首屏展现平均值
    页面显示的指标

    如何优化首屏展现平均值得分
减少渲染阻塞资源
JavaScript执行时间是提高首屏展现平均值得分的最佳方法之一。渲染阻塞资源是脚本和代码,它们优先阻止您网站的其他部分加载。与站点同时加载不同的元素不同,一些元素会暂停所有其他元素,直到它们完成。
  • First Input Delay (FID)首次输入延迟
    从用户第一次与网站交互直到浏览器实际能够对交互作出响应所经过的时间;用户等待响应,比如点击按钮,输入数据
  • Time To Interactive (TTI)可交互时间
    页面从开始加载到视觉上完成渲染、厨师脚本完成加载,并能够快速、可靠地响应用户输入所需的时间
  • Total Blocking Time (TBT)总阻塞时间
    FCP到TTI中所有长任务的阻塞时间之和(长任务执行时间超过50ms的部分被称为阻塞时间)
  • Cumulative Layout Shift (CLS) 累积布局偏移
    页面上非预期的位移波动

    元素偏移:元素是可见的且元素起始位置改变
    元素偏移值 = 影响范围 * 起始位置改变值
    一次偏移窗口: 5s内,元素偏移时间间隔少于1s的偏移值之和
    累计布局偏移:最大的偏移窗口
  • Frames Per Second (FPS)每秒传输帧数
    每秒可以重新绘制的帧数
    FPS过低会造成页面卡顿

没比别人多什么天赋;只有努力💪、用心、重复

23 声望
9 粉丝
0 条评论
推荐阅读
手把手教你写一份优质的前端技术简历
不知不觉一年一度的秋招又来了,你收获了哪些大厂的面试邀约,又拿了多少offer呢?你身边是不是有挺多人技术比你差,但是却拿到了很多大厂的offer呢?其实,要想面试拿offer,首先要过得了简历那一关。如果一份简...

tonychen153阅读 17.9k评论 5

封面图
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青57阅读 8.6k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy49阅读 7.3k评论 12

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 6.9k评论 12

封面图
CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^&lt...

XboxYan48阅读 3.3k评论 14

封面图
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs32阅读 3.5k评论 5

封面图
还在用 JS 做节流吗?CSS 也可以防止按钮重复点击
举个例子:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,比如只允许每300ms提交一次,这时候我想大部分同学都会到网上直接拷贝一段throttle函数,或者直接引用lodash工具库

XboxYan35阅读 2.7k评论 2

封面图

没比别人多什么天赋;只有努力💪、用心、重复

23 声望
9 粉丝
宣传栏