Web 性能测试

news2024/9/20 22:51:29

Web 性能测试

作为网站应用的开发者或维护者,我们需要时常关注网站当前的健康状况,譬如在主流程运行正常的情况下,各方面性能体验是否满足期望,是否存在改进与提升的空间,如何进行快速且准确的问题定位等,为了满足这些诉求,我们需要进行全面且客观的性能检测。

性能检测的认知

性能检测作为性能优化过程中的一环,它会在检测、记录和改进的迭代过程中不断重复,来协助网站的性能优化不断接近期望的效果。

(1)不要通过单一指标就能衡量网站的性能体验。建议从更多维度、更多具体的指标角度来考量网站应用的性能表现,比如页面的首屏渲染时间,不同类型资源的加载次数与速度,缓存的命中率等。

(2)不要一次检测就能得到网站性能表现的客观结果。需要在不同时间、不同环境、不同地点下收集尽量多的数据,然后以此来进行性能分析。

(3)不要仅在开发环境中模拟进行性能检测。在开发环境中模拟进行的性能检测具有许多优势:比如可以很方便地制定当前检测的设备状况与网络速度,可以对检测结果进行重复调试,但因其所能覆盖的场景有限,会很容易陷入“幸存者偏差”,即所发现的问题可能并非实际的性能瓶颈。

常见的检测工具

  • Lighthouse
  • WebPageTest
  • 浏览器 DevTools
    • 浏览器任务管理器
    • Network 面板
    • Coverage 面板
    • Memory 面板
    • Performance 面板
    • Performance monitor 面板
  • 性能监控 API
  • 持续的性能监控方案

使用灯塔 Lighthouse 测试性能

Lighthouse 直译过来是“灯塔”的意思,它是由 Google 开发并开源的一个 Web 性能测试工具。该性能检测工具以此命名也蕴涵了相同的含义,即通过监控和检测网站应用的各方面性能表现,来为开发者提供优化用户体验和网站性能的指导建议。直接在F12中就可以测试网站性能。

性能测试代码准备

  • https://github.com/CONOR007/web-lighthouse.git

性能指标

关于性能指标有以下六个关键的数据。
在这里插入图片描述
这6种不同的指标数据需要通过加权计算,才能得到关于性能的最终评分,所加的权值越大表示对应指标对性能的影响就越大,如下图所示,列出了目前 Lighthouse 的权重情况。

指标权重
FCP10%
SI10%
LCP25%
TTI10%
TBT30%
CLS15%

该权重系统还在不断优化过程中(最新权重请参考官方),虽然 Lighthouse 对于其中个别指标给予了较大的权重,也就意味着对该指标的优化能够带来更显著的性能评分提升,但这里还要建议在优化的过程中切勿只关注单个指标的优化,而要从整体性能的提升上来考虑优化策略。

优化建议

为了方便开发者更快地进行性能优化,Lighthouse 在给出关键性能指标评分的同时,还提供了一些切实可行的优化建议,如下图所示为检测报告中的优化建议。
在这里插入图片描述

这些建议按照优化后预计能带来的提升效果从高到低进行排列,每一项展开又会有更加详细的优化指导建议,从上到下依次包括以下内容。

(1)移除阻塞渲染的资源,部分JavaScript脚本文件和样式表文件可能会阻塞系统对网站页面的首次渲染,建议可将其以内嵌的方式进行引用,并考虑延迟加载。报告会将涉及需要优化的资源文件排列在下面,每个文件还包括尺寸大小信息和优化后预计提升首屏渲染时间的效果,据此可安排资源文件优化的优先级。

(2)预连接所要请求的源,提前建立与所要访问资源之间的网络连接,或者加快域名的解析速度都能有效地提高页面的访问性能。这里给出了两种方案:一种是设置〈link rel=“preconnect”〉的预连接,另一种是设置〈link rel=“dns-prefetch”〉的DNS预解析

(3)降低服务器端响应时间,通常引起服务器响应缓慢的原因有很多,因此也有许多改进方法:比如升级服务器硬件以拥有更多的内存或CPU优化服务器应用程序逻辑以更快地构建出所需的页面或资源,以及优化服务器查询数据库等,不要以为这些可能并非属于前端工程师的工作范围就不去关注,通常node服务器转发层就需要前端工程师进行相应的优化。

(4)适当调整图片大小,使用大小合适的图片可节省网络带宽并缩短加载用时,此处的优化建议通常对于本应使用较小尺寸的图片就可满足需求,但却使用了高分辨率的大图,对此进行适当压缩即可。

(5)移除未使用的CSS,这部分列出了未使用但却被引入的 CSS 文件列表,可以将其删除来降低对网络带宽的消耗,若需要对资源文件的内部代码使用率进行进一步精简删除,则可以使用 Chrome 开发者工具的Coverage面板进行分析。

诊断结果

这部分 Lighthouse 分别从影响网站页面性能的多个主要维度,进行详细检测和分析得到的一些数据,下面我们来对其进行介绍。
在这里插入图片描述

(1)对静态资源文件使用高效的缓存策略,这里列出了所有静态资源的文件大小及缓存过期时间,开发者可以根据具体情况进行缓存策略的调整,比如延迟一些静态资源的缓存期限来加快二次访问时的速度。
在这里插入图片描述

(2)减少主线程的工作,浏览器渲染进程的主线程通常要处理大量的工作:如解析 HTML 构建 DOM,解析 CSS 样式表文件并应用指定的样式,以及解析和执行 JavaScript 文件,同时还需要处理交互事件,因此渲染进程的主线程过忙很容易导致用户响应延迟的不良体验,Lighthouse 给我们提供了这一环节网站页面主线程对各个任务的执行耗时,让开发者可针对异常处理过程进行有目标的优化,如下图所示。

(3)降低JavaScript脚本执行时间,前端项目的逻辑基本都是依托于JavaScript执行的,所以JavaScript执行效率与耗时也会对页面性能产生不小的影响,通过对这个维度的检测可以发现执行耗时过长的JavaScript文件,进而针对性的优化JavaScript解析、编译和执行的耗时,如图11.20所示。

(4)避免存在较大尺寸网络资源的请求,因为如果一个资源文件尺寸较大,那么浏览器就需要等待其完全加载好后,才能进行后续的渲染操作,这就意味着单个文件的尺寸越大其阻塞渲染流程的时间就可能越长,并且网络传输过程中存在丢包的风险,一旦大文件传输失败,重新传输的成本也会很高,所以应当尽量将较大尺寸的资源进行优化,通常一个尺寸较大的代码文件可以通过构建工具打包成多个尺寸较小的代码包;对于图片文件如非必要还是建议在符合视觉要求的前提下尽量进行压缩。可以看出该检测维度列出的大尺寸资源文件,基本都是图片文件,如图11.21所示。

(5)缩短请求深度,浏览器通常会对同一域名下的并发请求进行限制,超过限制的请求会被暂时挂起,如果请求链的深度过长,则需要加载资源的总尺寸也会越大,这都会对页面渲染性能造成很大影响。因此建议在进行性能检测时,对该维度进行关注和及时优化,如图11.22所示。

已通过的性能

在这里插入图片描述

这部分列出的优化项为该网站已通过的性能审核项,对其中重要的几项进行介绍和解读。

(1)延迟加载首屏视窗外的图片,该审核项的优化原理在有关图像优化章节有过详细的介绍,对首屏关键资源加载完毕后,延迟首屏外或处于隐藏状态的图片加载能够有效缩短用户可交互前的等待时间,提升用户访问体验。

(2)压缩 CSS 文件,可降低网络负载规模。

(3)压缩 JavaScript 文件,可降低网络负载规模。

(4)对图片文件采用高效的编码方式,经过编码优化的图片文件,不但其加载速度会更快,而且需要传输的数据规模也会越小,详情可参考图像优化章节的内容。

(5)采用新一代的图片文件格式,WebP、JPEG XR、JPEG 2000等较新的图片文件格式通常比传统的PNG或JPEG有更好的压缩效果,能够获得更快的下载速度和更少的流量消耗,但使用的同时还需要注意对新格式的兼容性处理。

(6)开启文本压缩,对于文本资源,先压缩再提供能够最大限度地减少网络传输的总字节数,常用的压缩方式有 gzip、 deflate 和 brotli,至少采用其中一种即可。

(7)避免多次页面重定向,过多的重定向会在网页加载前造成延迟。

(8)预加载关键请求,通过 来预先获取在网页加载后期需要请求的资源,这主要是为了充分利用网站运行的间歇期。

(9)使用视频格式提供动画内容,建议通过 WebM 或 MPEG4 提供动画,来取代网站页面中大型 GIF 的动画。

(10)避免 DOM 的规模过大,如果 DOM 规模过大,则可能会导致消耗大量的内存空间、过长的样式计算耗时及较高的页面布局重排代价。Lighthouse 给出的参考建议是,页面包含的 DOM 元素最好少于1500个,树的深度尽量控制不要超过32层。

(11)确保在网页字体加载期间文本内容可见,使用 CSS 的 font-display 功能,来让网站页面中的文本在字体加载期间始终可见。

使用 WebPageTest 测试性能

WebPageTest 是一款非常专业的 Web 页面性能分析工具,它可以对检测分析的环境配置进行高度自定义化,内容包括测试节点的物理位置设备型号浏览器版本网络条件检测次数等,除此之外,它还提供了目标网站应用于竞品之间的性能比较,以及查看网络路由情况等多种维度下的测试工具。
在这里插入图片描述

可直接打开 WEBPAGETEST 的主页面,在配置好目标网站应用的网址和检测参数后便可启动测试,等待检测运行结束就能查看详细的测试报告。

  • 官网地址
    • https://www.webpagetest.org/
  • 基本使用
    • https://docs.webpagetest.org/getting-started/

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

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

相关文章

mongoDB操作文档(全部)

mongoDB 1、创建、查询数据库 创建数据库 use dade 查询数据库 show dbs 2、创建集合、查看 创建集合插入数据 db.集合名.insert({}) db.dade.insert({dade:大得,age:18}) ​ 查看集合 show tables ​ 查看集合中的数据 db.集合名.find() 查询所有 db.dade.find() ​ db.集…

微服务框架 SpringCloud微服务架构 16 SpringAMQP 16.1 基本介绍

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构16 SpringAMQP16.1 基本介绍16.1.1 什么是SpringAMQP16 SpringAMQP 16.1 …

Android -- 每日一问:你在Android开发中遇到的技术难题是什么,你是怎么解决的?

经典回答 一个工作过几年的程序员肯定会有工作中遇到技术难点问题,虽然这个问题有可能对于别人不是技术难点,但只要对于当时的你是技术难点,只要让你抓耳挠腮毫无头绪就往往会在你的大脑中留下深刻的印象。 这个问题,我也比较难…

【三维目标检测】VoteNet(二)

VoteNet数据和源码配置调试过程请参考上一篇博文:【三维目标检测】VoteNet(一)_Coding的叶子的博客-CSDN博客。本文主要详细介绍VoteNet网络结构及其运行中间状态。 1 VoteNet模型总体过程 VoteNet核心思想在于通过霍夫投票的方法实现了端到…

[附源码]计算机毕业设计基于SpringBoot的高校课程知识库

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

1550_AURIX_TC275_锁相环的操作

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 继续SCU模块的学习,这一次主要是看一下锁相环的操作。锁相环之前接触的不少了,其实主要的一个功能就是提升单片机的时钟主频。 1. 备份时钟其实也是稳定可靠的&…

供应荧光染料FITC-PEG-FA,Folic acid-PEG-Fluorescein,荧光素-聚乙二醇-叶酸

An English name:FITC-PEG-FA,Folic acid-PEG-Fluorescein Chinese name:荧光素-聚乙二醇-叶酸 Item no:X-GF-0247-5k CAS:N/A Formula:N/A MW:荧光素-聚乙二醇5-叶酸、FITC-PEG 2-FA、荧光…

使用Python和SAS Viya分析社交网络

本示例使用Python和SAS分析了预防高危药物研究的结果。这个社交网络有194个节点和273个边,代表药物、使用者之间的联系。最近我们被客户要求撰写关于社交网络的研究报告,包括一些图形和统计输出。 背景 SAS Viya的最新版本提供了用于探索实验问题的全套创…

GIT分布式版本控制系统 | 命令讲解入门

Git概述 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件;分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…

车间调度|基于帝王蝶优化算法的车间调度(Matlab代码实现)

目录 1 概述 2 蝴蝶优化算法 3 车间调度 3.1 车间调度描述 3.2 数学模型 4 运行结果 5 参考文献 6 Matlab代码实现 1 概述 随着智能化在制造业中的普及,解决车间生产调度的问题能有效提高车间的工作学习效率,实现车间现场管理的有序化、智能化…

极客时间Kafka - 01 Kafka术语|生产者|消费者|主题|分区|副本|ISR|OSR|AR|HW|LEO|Offset

文章目录1. 为什么需要消息引擎?2. Kafka 相关术语3. Kafka 基本概念1. 为什么需要消息引擎? 答案就是“削峰填谷”。 所谓的“削峰填谷”就是指缓冲上下游瞬时突发流量,使其更平滑。特别是对于那种发送能力很强的上游系统,如果没…

Java—hashCode、equals

文章目录hashCode()介绍hashCode()hashCode方法作用为什么要有hashCode()?equals()equals()作用?为什么重写equals方法必须重写hashcode方法?128陷阱?equals和hashCode的关系——————————————————————————…

前端环境变量及vite中本地环境配置实践

前言 前端在之前并没有工程化的概念,甚至开发环境、测试环境、生产环境全靠大家手动配置。 有了nodejs之后,环境变量 (environment variables)这个概念,便慢慢进入了前端的视野,方便了前端各种环境自动化…

Android背景和音乐

Android背景和音乐前言一、添加背景图片二、加入背景音乐前言 简单的给app添加背景图和音乐 一、添加背景图片 准备好一张合适的背景图片新建一个Empty Activity项目选择Java语言在res中创建一个mipmap文件,将准备的图片粘贴到该文件目录下 在activity_main.xml里面添加代码…

mysql高阶语句

目录 前言 一、高级sql语句 1、按关键字排序 二、区间判断 ——且/或 三、 distinct 查询不重复记录 四、对结果进行分组 五、限制结果条目——limit 六、设置别名(alias ——>as) 七、通配符 八、子查询 前言 当我们对mysql数据库进行了查…

GJB 5000B二级-QA质量保证

1、主要变化情况 修订2条,合并1条(绿色),新增1条(黄色) 新增的主要内容 将原标准过程域名称“过程和产品质量保证”改为“质量保证” 目的:评价并改进已执行的过程和所产生的工作产品的质量,确保其满足已制定的过程说明和适用的标准。 (GJB5000A:过程和产品质量保…

RISC-V SiFiveU64内核——L2 Prefetcher预期器

目录L2 Prefetcher简介操作流退出页边界Memory Map控制寄存器L2 Prefetcher 初始化L2 prefetcher是U64内核新增的功能,U54内核没有这个功能。打开L2 prefetcher功能后,当访问大片内存,同时dcache中没有缓存时,访问内存的速率可以提…

用R语言和python进行社交网络中的社区检测

在这篇文章中,我用R语言和python检测社交网络中的社区。最近我们被客户要求撰写关于社区检测的研究报告,包括一些图形和统计输出。 相关视频:复杂网络分析CNA简介与R语言对婚礼数据聚类(社区检测)和可视化|数据分享 复…

(一)LTspice简介

文章目录前言一、举例1.1、RC滤波1.2、仿真结果二、软件安装总结前言 LTspice是一款高性能SPICE仿真器软件,包括原理图捕获图形界面。可探测原理图以产生仿真结果,通过LTspice内置波形查看器轻松探索。与其他SPICE解决方案相比,LTspice的增强…

mysql之SQL练习

常见面试题 学生表:student(学号,学生姓名,出生年月,性别) 成绩表:score(学号,课程号,成绩) 课程表:course(课程号,课程名称,教师号) 教师表:teacher(教师号,教师姓名) 1查询学生总成绩排名 SELECTstu_no,sum(score_prize) AS to…