【前端八股】系列之性能指标与评估工具

【前端八股】系列之性能指标与评估工具

  • 前言
  • 性能指标的定义和特性
  • 性能指标的分类
  • 实验室指标
  • 真实指标
  • 用户感知指标
  • 评估工具

前言

这里是以前自己关于性能指标与评估工具的相关笔记,下面主要是关于性能指标的定义与特性以及相关的评估工具,并没有记录深入。

下面是推荐阅读的博客:
前端性能优化-性能指标 - 掘金

性能指标的定义和特性

性能是相对的!!!!

网页的加载速度,响应速度等会受到网速,设备等指标的影响,所以这个时候需要进行一些定量测量的客观标准来评价性能。

长久以来,网络性能都是通过load事件进行测量的。然而,尽管load是页面生命周期中明确定义的时刻,但该时刻并不一定与用户在意的任何方面相对应。

是否正在发生?导航是否成功启动?服务器有响应吗?
是否有用?是否渲染了足够的内容让用户可以深入其中?
是否可用?页面是否繁忙,用户是否可以与页面进行交互?
是否令人愉快?交互是否流畅自然,没有延迟和卡顿?

性能指标的分类

真实指标、实验室指标、用户感知指标 、自定义指标

  • 在实验室中:使用工具在稳定、受控的环境中模拟页面加载

  • 在实际情况中:基于真实用户的实际页面加载与页面交互

    虽然实验室指标可以对前端性能进行一个比较合理的评价,但是这不能反映所有用户在实际情况下对前端界面的使用。比如我在微信开发工具中使用不同的模拟机去模拟,但是也是无法覆盖所有手机的真实情况,比如有的手机是曲面屏,字体设置大小可能也不一样,而且我所测试的模拟机的网络状态也可能跟多数用户的网络状态不一样。也就是这种用户的设备,个性化或者状态的不确定性,所以我们不能只使用实验室的指标进行评价。

    如果想要真实的了解前端界面的性能,还是得进行实测,也就是利用真实指标来评价前端界面(RUM)。除此之外,其实还有用户感知指标(主要在加载速度、响应速度、平滑度的感知方面)

    自定义指标:

    • 用户计时 API
    • 长任务 API
    • 元素计时 API
    • 导航计时API
    • 资源计时 API
    • 服务器计时

💡 简述:

指标的话可以分为四种,实验室指标,真实指标,用户感知指标和自定义指标。
实验室指标主要有可交互时间TTI和总阻塞时间TBT。

  • 可交互时间 TTI 度量从页面开始加载到主要的子资源加载完成并且能够快速可靠地响应用户交互的时间;
  • 总阻塞时间TBT:测量 FCP 与 TTI 之间的总时间,这期间,主线程被阻塞的时间过长,无法作出输入响应

真实指标主要有首次内容绘制时间FCP,最大内容绘制时间LCP,累积布局偏移时间CLS,首次输入延迟时间FID,其中前三个为实验室和真实均可用。

  • 首次内容绘制FCP指的是页面加载过程中出现第一个元素的时间(部分渲染);
  • 最大内容绘制LCP指的时页面加载过程中,主要内容已经全部加载的时间(主要内容全部渲染,比如图像,视频【使用封面图片的】,文本节点或者其他内联元素或者块级元素);
  • 累积布局偏移 (CLS)度量的是在页面的整个生命周期中每一次意外布局移位的总和。
  • 首次输入延迟 (FID)是指用户从第一次与页面交互到前端界面真正能够开始处理时间处理程序以响应交互的时间。(仅仅是事件处理的延迟!!!)

用户感知指标主要是指用户的感知的速度,视觉稳定性,平滑度。

自定义指标我了解到的主要是通过一些API来实现,比如服务器计时API,资源计时API等。

评估工具——谷歌开发工具,Lighthouse,PageSpeed Insights,web pagetest,Pingdom

实验室指标

  • 可交互时间 TTI 度量从页面开始加载到主要的子资源加载完成并且能够快速可靠地响应用户交互的时间。
    • Time to Interactive 可交互时间 (TTI):测量页面从开始加载到视觉上完成渲染、初始脚本(如果有的话)完成加载,并能够快速、可靠地响应用户输入所需的时间。(实验室)
    • 尽量减少 FCP 和 TTI 之间的差异。在某些情况下,确实存在明显的差异,可以通过加载动画告知用户页面还不具备交互性。
  • Total blocking time 总阻塞时间 (TBT):测量 FCP 与 TTI 之间的总时间,这期间,主线程被阻塞的时间过长,无法作出输入响应。(实验室)

真实指标

  • 首次内容绘制FCP指的是页面加载过程中出现第一个元素的时间(部分渲染),是用于度量感知加载速度(用户肉眼可观察)的重要指标。它标记了页面加载时间轴上的第一个点,在这个时间点用户可以看到页面出现了具体内容。

    • 示例:First contentful paint 首次内容绘制 (FCP):测量页面从开始加载到页面内容的任何部分在屏幕上完成渲染的时间。(实验室、实际)
      在这里插入图片描述

    • 代码实现

      import {getFCP} from 'web-vitals';
      
      // Measure and log FCP as soon as it's available.
      getFCP(console.log);
      
  • 最大内容绘制LCP指的时页面加载过程中,主要内容已经全部加载的时间(主要内容全部渲染),是用于度量感知加载速度(用户肉眼可观察)的重要指标。它标记了页面加载时间轴上的一个点,在这个时间点页面的主要内容已经加载(比如图像,视频【使用封面图片的】,文本节点或者其他内联元素或者块级元素)。控制在 2.5s 的范围内

    • 示例:Largest contentful paint 最大内容绘制 (LCP):测量页面从开始加载到最大文本块或图像元素在屏幕上完成渲染的时间。(实验室、实际)
      在这里插入图片描述

    • 代码实现

      new PerformanceObserver((entryList) => {
        for (const entry of entryList.getEntries()) {
          console.log('LCP candidate:', entry.startTime, entry);
        }
      }).observe({type: 'largest-contentful-paint', buffered: true});
      
  • 累积布局偏移 (CLS)度量的是在页面的整个生命周期中每一次意外布局移位的总和。

    • 示例:Cumulative layout shift 累积布局偏移 (CLS):测量页面在开始加载和其生命周期状态变为隐藏期间发生的所有意外布局偏移的累积分数。(实验室、实际)
      在这里插入图片描述

    • 代码

      layout shift score = impact fraction * distance fraction

      impact fraction 表示不稳定元素对两帧间视口区域的影响。

      let cls = 0;
      new PerformanceObserver((entryList) => {
        for (const entry of entryList.getEntries()) {
          if (!entry.hadRecentInput) {
            cls += entry.value;
            console.log('Current CLS value:', cls, entry);
          }
        }
      }).observe({type: 'layout-shift', buffered: true});
      
  • 首次输入延迟 (FID)是指用户从第一次与页面交互到前端界面真正能够开始处理时间处理程序以响应交互的时间。(仅仅是事件处理的延迟!!!)

    • 一般 input 延迟是因为浏览器主线程繁忙不能及时响应用户,最通常的原因就是浏览器忙于处理和执行大的 JavaScript 文件。

    • FID 度量的仅仅是事件处理的延迟,它不会考虑事件处理时间本身和浏览器在执行事件处理程序之后更新页面 UI 的时间。

    • 示例:First input delay 首次输入延迟 (FID):测量从用户第一次与您的网站交互(例如当他们单击链接、点按按钮或使用由 JavaScript 驱动的自定义控件)直到浏览器实际能够对交互做出响应所经过的时间。(实际)

    • 代码

      new PerformanceObserver((entryList) => {
        for (const entry of entryList.getEntries()) {
          const delay = entry.processingStart - entry.startTime;
          console.log('FID candidate:', delay, entry);
        }
      }).observe({type: 'first-input', buffered: true});
      

用户感知指标

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

评估工具

谷歌开发工具,Lighthouse,PageSpeed Insights,web pagetest,Pingdom…

  • 谷歌开发者工具Chrome DevTools,是谷歌浏览器自带的一个web编写和调试工具。
  • Lighthouse是一个开源的自动化工具,用于改进网络应用的质量。 你可以将其作为一个 Chrome 扩展程序运行,或从命令行运行。适用于网页版和移动端。能生成一个包括页面性能、PWA(Progressive Web apps,渐进式 Web 应用)、可访问性(无障碍)、最佳实践、SEO 的报告清单提供参考。
  • PageSpeed Insights 谷歌开发的一个免费的网页分析工具,在地址栏中输入被分析的网站 url 地址,点击分析。
  • web pagetest 一个在线性能评测网站, 它是一个非常详细且专业的web页面性能分析工具,而且开源的!支持IE,Chrome,使用真正的浏览器(IE和Chrome)和真实的消费者连接速度,从全球多个地点运行免费网站速度测试。WebpageTest 主要提供了Advanced Testing、simple Testing、Visual Comparison、Traceroute四个功能。
  • Pingdom 可测试页面加载速度,分析并找出性能瓶颈。帮助用户找出影响网站速度的原因,并给出改善网页性能的可行性方案,很适合做网站的用户。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导---人工智能工作笔记0105

之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去看,也…

mysql8支持远程访问

上面的localhost要改为%号就打开了远程访问 ALTER USER root% IDENTIFIED WITH mysql_native_password BY fengzi2141;

vite原理

一、依赖预构建 1、为什么需要依赖预构建 CommonJS和UMD兼容性 在开发阶段中,vite的开发服务器将所有的代码视为原生ES模块。因此,vite必须先将作为CommonJS或者UMD发布的依赖项转换为ESM。 这是vite的一个特色,也是为什么会相对于webpack比…

Android动画(一)——逐帧动画

目录 介绍 Android动画类型分类 逐帧动画 逐帧动画的使用 效果图 介绍 Android动画是一种用于创建视觉效果和交互体验的技术,可以增强用户界面的吸引力和响应性。Android提供了丰富的动画框架和API,使开发者可以轻松地添加动画效果到他们的应用程序中…

n维随机变量、n维随机变量的分布函数

设随机试验E的样本空间是,其中表示样本点。 设是定义在上的随机变量,由它们构成一个n维向量,叫做n维随机向量,也叫n维随机变量。 对于任意n个实数,n元函数 称为n维随机变量的分布函数,也叫联合分布函数。

springCloud项目打包如何把jar放到指定目录下

springCloud项目打包如何把jar发放到指定目录下 maven-antrun-plugin springCloud微服务打包jar,模块过多;我的项目模块结构如下: 我把实体类相关的单独抽离一个模块在service-api下服务单独写在service某块下, 每个模块的jar都…

【C++】 C++11 新特性探索:decltype 和 auto

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用🛬 结论📖 参考资料 🛫 问题 描述 C11 引入了一些强大的新特性&#xff…

【python】Debian安装miniconda、spyder、tushare

1. miniconda 安装 — 动手学深度学习 2.0.0 documentation中有安装Miniconda的一些说明。 Miniconda — miniconda documentation是Miniconda网站,里面也有安装说明。 Debian安装按照linux安装即可: mkdir -p ~/miniconda3 wget https://repo.anaco…

软实力篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、HR 最喜欢问程序员的 20 个问题二、面试中的礼仪与举止前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、HR 最喜欢…

机器学习---协同过滤

协同过滤(Collaborative Filtering)技术,是推荐系统中应用最为广泛的技术之一,协同过滤算法主要有两种,一种是基于用户的协同过滤算法(UserBaseCF),另一种是基于物品的协同过滤算法(ItemBaseCF)…

直接插入排序_希尔排序

文章目录 直接插入排序原理步骤视频演示代码实现特性 希尔排序原理步骤图像演示代码实现希尔排序的分析特性 直接插入排序和希尔排序的比较 直接插入排序 直接插入排序(Straight InsertionSort)是一种最简单的排序方法,其基本操作是将一条记录…

腾讯云:AI云探索之路

随着科技的飞速发展,人工智能(AI)云计算领域日益显现出其巨大的潜力和价值。在这个充满挑战和机遇的领域,腾讯云凭借其卓越的技术和创新能力,取得了令人瞩目的成果。本文将深入探讨腾讯云在AI云计算领域的优势,以及其为人工智能发…

Multi-sensor KIT-V3.0 多传感器开发板

Multi-sensor KIT-V3.0 多传感器开发板 1.前言1.1 特点 2. Multi-sensor KIT QMA8658A-EVB QMC5883评估板的扩展2.1 特点 3. Multi-sensor KIT (QMA8658A-EVB QMC5883) Ultrasonic-CH-X01-EVB评估板的扩展3.1 特点 4.资料资源Multi-sensor KIT-V3.0 …

基于Hadoop的农产品价格信息检测分析系统

基于Hadoop的农产品价格信息检测分析系统 前言数据处理模块1. 数据爬取2. 数据清洗与处理3. 数据存储 数据分析与检测模块1. 农产品价格趋势分析2. 农产品价格检索3. 不同市场价格对比 创新点 前言 为了更好地了解农产品市场价格趋势和不同市场之间的价格差异,我设…

swing快速入门(十五)

注释很详细,直接上代码 上一篇 新增内容 1.文件对话框(保存文件) 2.文件对话框(打开文件) import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class swing_tes…

飞天使-docker知识点4-harbor

文章目录 Harbor安装完成harbor 官方建议方式之后查看 images配置docker 使用harbor 仓库上传下载镜像docker 镜像结合harbor 运行 Harbor Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由 vmware 开源,其通过添加一些企业必需的功…

前后端开发鄙视链的真相,希望对从事前后端开发的小伙伴有些帮助

一、常规的工资对比 前后端的工资情况怎么样?过来人可以负责任的告诉大家:据我所知,至少在杭的网易、阿里,前端跟后端是一个批发价。

【PostgreSQL】从零开始:(二)PostgreSQL下载与安装

【PostgreSQL】从零开始:(二)PostgreSQL下载与安装 Winodws环境下载与安装PostgreSQL下载PostgreSQL安装PostgreSQL1.登录数据库2.查看下我们已有的数据库 Liunx环境下载与安装PostgreSQL使用YUM下载安装PostgreSQL1.下载PostgreSQL安装包2.安装PostgreS…

DCN神州数码WAF-P-2021命令行恢复出厂

注意:执行该命令将会清除设备的所有配置信息,包括网络配置、安全策略等,并将设备恢复到出厂设置时的默认配置。在执行该操作之前,请务必备份重要的设备配置信息。 Console接入波特率9600,输入帐号密码admin/yunke1234…

Mac安装软件显示文件已损坏处理方法

今天安装软件,突然遇到了文件已损坏,扔到废纸篓的情况,于是搜索了下解决办法,跟大家分享下,希望对你有所帮助 一、检查安全性设置 打开【设置】-【隐私与安全】,下拉找到安全性,将安全性更改为…