Web 性能指标

news2024/12/23 0:40:01

Web 性能指标

对于 Web 开发人员来说,如何衡量一个 Web 页面的性能一直是一个难题。

最初,我们使用 Time to First ByteDomContentLoadedLoad 这些衡量文档加载进度的指标,但它们不能直接反应用户视觉体验。

为了能衡量用户视觉体验,Web 标准中定义了一些性能指标,这些性能指标被各大浏览器标准化实现,例如 First Paint 和 First Contentful Paint。还有一些由 Web 孵化器社区组(WICG)提出的性能指标,如 Largest Contentful PaintTime to InteractiveFirst Input DelayFirst CPU Idle。另外还有 Google 提出的 First Meaningful PaintSpeed Index,百度提出的 First Screen Paint

这些指标之间并不是毫无关联,而是在以用户为中心的目标中不断演进出来的,有的已经不再建议使用、有的被各种测试工具实现、有的则可以作为通用标准有各大浏览器提供的可用于在生产环境测量的 API。

RAIL 性能模型

RAILResponse, Animation, Idle, 和 Load的首字母缩写, 是一种由 Google Chrome 团队于 2015 年提出的性能模型, 用于提升浏览器内的用户体验和性能。

RAIL 模型的理念是”以用户为中心,最终目标不是让您的网站在任何特定设备上都能运行很快,而是使用户满意”。

这个名字的由来是四个英文单词的首字母:
在这里插入图片描述

  • 响应Response):应该尽可能快速的响应用户, 应该在 100ms 以内响应用户输入。

  • 动画Animation):在展示动画的时候,每一帧应该以 16ms 进行渲染,这样可以保持动画效果的一致性,并且避免卡顿。

  • 空闲Idle):当使用 Javascript 主线程的时候,应该把任务划分到执行时间小于 50ms 的片段中去,这样可以释放线程以进行用户交互。

  • 加载Load):应该在小于 1s 的时间内加载完成你的网站,并可以进行用户交互。

用户对性能延迟的看法

在这里插入图片描述

用户对性能延迟的感知有所不同,具体取决于网络条件和硬件。例如,通过快速 Wi-Fi 连接,在功能强大的台式机上加载站点时,通常只需不到 1 秒时间,用户已经习以为常。通过速度较慢的 3G 网络连接,在移动设备上加载站点则需要更长的时间,因此,移动用户通常会更有耐心。在移动设备上,5 秒钟内完成加载是更现实的目标。

响应: 在 50 毫秒内处理事件

目标

在 100 毫秒内完成由用户输入发起的转换,让用户感觉交互是即时的。

准则

  • 为了确保在 100 毫秒内产生可见响应,需要在 50 毫秒内处理用户输入事件。这适用于大多数输入,例如点击按钮、切换表单控件或启动动画。但是,这不适用于触摸拖动或滚动。

  • 尽管听起来可能有些自相矛盾,但是,即时响应用户输入并非总是正确的做法。您可以利用这 100 毫秒的时间窗口来执行其他需要消耗大量资源的工作,但是,注意不能妨碍用户。如果可能,应在后台工作。

  • 对于需要 50 毫秒以上才能完成的操作,请随时提供反馈。

50 毫秒还是 100 毫秒?

目标是在 100 毫秒内响应输入,那么,为什么我们的预算只有 50 毫秒?这是因为除输入处理外,通常还有需要执行其他工作,而且这些工作会占用可接受输入响应的部分可用时间。如果应用程序在空闲时间以推荐的 50 毫秒区块执行工作,这就意味着,如果输入在这些工作区块之一中发生,它最多可能会排队 50 毫秒。考虑到这一点,假设只有剩余的 50 毫秒可用于实际输入处理才是安全地做法。下图展示了这种影响,图中显示了在空闲任务期间收到的输入如何排队,从而减少可用的处理时间:
在这里插入图片描述

动画:在 10 毫秒内生成一帧

识别所有类型的动画。动画不是花哨的 UI 效果。下面这些交互都是动画: - 视觉动画,例如进入和退出,补间和加载指示器。 - 滚动。这包括滑动,即用户开始滚动,然后松开,而页面会继续滚动。 - 拖放。动画通常遵循用户交互,例如平移地图或捏合缩放

目标:

  • 在 10 毫秒或更短的时间内生成动画的每一帧。从技术上来讲,每帧的最大预算为 16 毫秒(1000 毫秒/每秒 60 帧≈16 毫秒),但是,浏览器需要大约 6 毫秒来渲染一帧,因此,准则为每帧 10 毫秒。

  • 目标为流畅的视觉效果。用户会注意到帧速率的变化。

准则:

  • 在动画之类对计算速度要求极高的场景下,关键在于即使可行,您也不能执行任何其他操作,让不能执行的操作保持绝对最少。只要可能,您就要利用这 100 毫秒的响应时间预先计算最消耗资源的工作,从而最大限度地提高达到 60 fps 的几率。

  • 有关各种动画优化策略,请参阅渲染性能。

空闲:最大限度增加空闲时间

目标:

最大限度增加空闲时间以提高页面在 50 毫秒内响应用户输入的几率。

准则:

利用空闲时间完成延缓的工作。例如,对于初始页面加载,应加载尽可能少的数据,然后利用空闲时间加载其余数据。

在 50 毫秒或更短的空闲时间内执行工作。如果时间更长,您可能会干扰应用在 50 毫秒内响应用户输入的能力。

如果用户在空闲时间工作期间与页面交互,则应中断空闲时间工作,用户交互始终具有最高优先级。

加载:在 5 秒内交付内容并实现可交互

目标:

  • 根据用户的设备和网络能力优化相关的快速加载性能。目前,对于首次加载,在使用速度较慢 3G 连接的中端移动设备上,理想的目标是在 5 秒或更短的时间内实现可交互。

  • 对于后续加载,理想的目标是在 2 秒内加载页面。

准则:

在最常见的用户移动设备和网络连接上测试负载性能。您可以使用 Chrome 用户体验报告来了解用户的连接分布。如果数据不适用于您的站点,移动经济 2019 建议的理想全球标准是中端 Android 手机,例如 Moto G4 和速度较慢的 3G 网络(定义的 RTT 为 400 毫秒,传输速度为 400 kbps)。WebPageTest 上提供了这一组合。

请记住,尽管您的典型移动用户的设备可能声称它使用的是 2G、3G 或 4G 连接,但实际上,由于数据包丢失和网络差异,有效连接速度通常要慢得多。

消除阻塞渲染资源。

为了产生完整加载的感觉,您不必在 5 秒钟时间内加载所有内容。不妨考虑延迟加载图像、代码拆分 JavaScript 包以及 web.dev 上建议的其他优化。

识别影响页面加载性能的因素: - 网络速度和延迟 - 硬件(例如,速度较慢的 CPU) - 缓存逐出 - L2/L3 缓存的差异 - 解析 JavaScript

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

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

相关文章

[附源码]计算机毕业设计springboot志愿者服务平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[数据结构]八大排序算法总结

作者: 华丞臧专栏:【数据结构】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。推荐一款刷题网站 👉 LeetCode刷题网站 目录 一、排序的概念及其运用 1.1排…

【目的:windows下VS2017/2022配置使用opengl - 初探-创建一个空窗口】

目的:windows下VS2017/2022配置使用opengl - 初探-创建一个空窗口 环境: 系统:Win10 环境:VS2017 64bit步骤: windows下visualstudio下使用opengl,搭建配置环境并测试窗口 1、opengl库,vs下自…

Crack:Open Inventor 10.12.1 Fixed Bugs List 10.12

10.12.0 - 10.12.1 Open Inventor 10.12.1 Core #OIV-4245 Shapes not rendered with MultipleInstancing  #OIV-4258 Transparency issue with SoPackedColor – CAS-41256-F0S4 OivSuite.Java #OIV-4273 Memory leak with RemoteViz Java and JVM VolumeViz #OI…

CMake中add_library的使用

CMake中的add_library命令用于使用指定的源文件向项目(project)中添加库&#xff0c;其格式如下&#xff1a; add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][<source>...]) # Normal Libraries add_library(<name> OBJECT [<source&…

【Java 快速复习】垃圾回收算法 垃圾回收器

快速理解 Java 垃圾回收算法 & 垃圾回收器 先说个关系概念&#xff0c;垃圾回收的算法是逻辑概念的定义&#xff0c;用于规范垃圾回收器实现方的一些行为&#xff0c;而垃圾回收器就是实现这些算法的工具&#xff0c;这些工具大概是一系列的 C 的类以及其实现的一些对应回…

Linux服务器上跑深度学习实验

原文地址&#xff1a;Linux上跑深度学习实验 目录远程连接环境搭建与服务器断开连接后代码停止之前一直使用Google Colab跑实验&#xff0c;因为实验的规模不大&#xff0c;配合Google Drive用起来就很舒服&#xff0c;但是最近要系统地进行实验&#xff0c;规模一下子上来了&a…

【Spring】一文带你搞懂Spring容器配置

前言 本文为大家介绍的是Spring容器配置相关知识&#xff0c;包含Bean和Configuration的使用&#xff0c;使用 AnnotationConfigApplicationContext实例化Spring容器&#xff0c;Bean注解的使用&#xff0c;Configuration的使用&#xff0c;Import 注解的使用&#xff0c;结合J…

C++中STL-set详解

目录 set/ multiset容器 1. set基本概念 2.set构造和赋值 3.set大小和交换 4.set插入和删除 5.set容器-查找和统计 6.set和multiset的区别 7.pair对组创建 8.set容器排序 9.set存放自定义数据类型 set/ multiset容器 1. set基本概念 简介: 所有元素都会在插入时自动…

使用Apisix打造家庭NAS网关,免公网IP访问

使用Apisix打造家庭NAS网关 本文使用apisix打造家庭NAS网关&#xff0c;并通过cloudflare进行穿透&#xff0c;可免公网IP访问。首先你的NAS支持Docker&#xff0c;没有NAS也没有关系&#xff0c;只要你的电脑支持Docker同样可以参照该教程。 1 依赖资源准备 准备域名: 免费…

HTML+CSS+JS做一个好看的个人网页—web网页设计作业

个人网页设计个人网页&#xff08;htmlcssjs&#xff09;——网页设计作业带背景音乐&#xff08;The way I still Love you&#xff09;、樱花飘落效果、粒子飘落效果页面美观&#xff0c;样式精美涉及&#xff08;htmlcssjs&#xff09;&#xff0c;下载后可以根据自己需求进…

8086,8088CPU管脚,奇偶地址体, 时钟信号发生器8284 ,ready信号,reset复位信号。规则字和非规则字

8086/8088均为40条引线&#xff0c;双列直插式封装&#xff0c;某些引线有多重功能&#xff0c;其功能转换有两种情况&#xff1a;一种是分时复用&#xff0c;一种是按组态定义。 用8088微处理器构成系统时&#xff0c;有两种不同的组态&#xff1a; 最小组态&#xff1a;808…

模型效果不好?推荐你8种机器学习调参技巧

大家好&#xff0c;今天给大家一篇关于机器学习调参技巧的文章 超参数调优是机器学习例程中的基本步骤之一。该方法也称为超参数优化&#xff0c;需要搜索超参数的最佳配置以实现最佳性能。 机器学习算法需要用户定义的输入来实现准确性和通用性之间的平衡。这个过程称为超参…

嵌入式开发学习之--RCC(上)

提示&#xff1a;本篇主要介绍一下不同时钟的特性和作用&#xff0c;了解为主。 文章目录前言一、RCC简介二、系统时钟简介2.1HSE 高速外部时钟信号2.2锁相环 PLL2.3系统时钟 SYSCLK2.4AHB 总线时钟 HCLK2.5 APB2 总线时钟 HCLK22.6 APB1 总线时钟 HCLK1三、其他时钟3.1RTC 时钟…

HTTP 请求是什么?

文章目录HTTP请求一&#xff0c;请求行二&#xff0c;请求头三&#xff0c;空行四&#xff0c;请求体五&#xff0c;HTTP请求示例HTTP请求 请求是由客户端向服务器发送的&#xff0c;一般可以分为请求行、请求头、空行和请求体四个部分&#xff0c;如下图所示&#xff1a; 一…

【数据集NO.2】工业检测数据集汇总(缺陷、纹理等检测)

文章目录前言一、东北大学钢材表面缺陷数据集二、天池铝型材表面缺陷数据集三、Severstal 带钢缺陷数据集四、UCI 带钢缺陷数据集五、磁瓦缺陷数据集六、RSDDs铁轨表面缺陷数据集七、印刷电路板&#xff08;PCB&#xff09;瑕疵数据集八、坑洼检测数据集九、Kylberg纹理检测十、…

C语言:文件操作(1)

1、什么是文件&#xff1f; 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种: 程序文件、数据文件 程序文件&#xff1a; 包括源程序文件(后缀为.c)&#xff0c;目标文件(windows环境后缀为.obj)&#xff0c;可执行程序(wndows环境后缀为.exe) 数…

初级测试到中级测试就差这几个找bug小技巧

前言 测试的过程就是一个寻找影响产品功能和用户体验bug的过程&#xff0c;测试人员发现的bug类型五花八门。 当你在上班期间&#xff0c;听到不远处传来这样的声音“你会不会提BUG&#xff0c;责任人都指派错了&#xff0c;还能好好提吗&#xff1f;” 如果哪天开发对着你说…

Babel自动生成Attribute文档实现详解

这篇文章主要为大家介绍了Babel自动生成Attribute文档实现示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff01; 1. 前言 利用Babel自动解析源码属性上的注释生成对应Markdown文档&#xff0c;这个场景的应用主要包括在组件库文档对组件…

SpringBoot单元测试

文章目录1、什么是单元测试2、单元测试有哪些好处&#xff1f;3、SpringBoot 单元测试使用3.1 生成单元测试的类3.2 配置单元测试的类并添加SpringBootTest注解3.3 添加单元测试的业务代码3.4 进行测试并查看结果3.5 使用断言3.6 在不修改数据库的前提下&#xff0c;执行单元测…