性能测试 —— 前端性能监控与优化方案!

news2024/11/25 11:23:01

前端性能监控(Real User Monitoring, RUM)是一种用于实时监控前端用户行为和响应时间数据的技术。它主要关注Web、小程序等场景的用户页面性能(如页面测速、接口测速、CDN测速等)和质量(如JS错误、Ajax错误等),并且可以与后端监控相结合,实现前后端一体化监控。

前端性能监控的实现通常通过在网站或应用程序中嵌入JavaScript代码来监测前端性能数据。此外,它还可以监控到应用程序的错误和崩溃情况。前端性能监控的目的是帮助开发人员更好地了解前端应用的性能情况,从而进行优化和改进,提升用户体验。

在性能监控方面,常见的监控数据包括首屏加载时间、白屏时间、请求的响应时间、静态资源整体下载时间、页面渲染时间、首次可交互时间等。这些数据可以帮助开发人员分析出前端性能的好坏,并指向性地优化各块性能。

监控步骤

图片

前端性能监控是性能测试的重要环节,其监控步骤主要包括以下几个方面:

1.确定监控指标:根据业务需求和技术特点,确定需要监控的性能指标,如页面加载时间、资源加载时间、渲染时间、内存占用等。

2.选择监控工具:根据监控指标的需求,选择适合的前端性能监控工具。目前市场上有很多优秀的工具可供选择,如Lighthouse、PageSpeed Insights、Perfecto等。

3.部署监控代码:将监控代码集成到前端应用中,确保能够实时收集性能数据。监控代码通常包括页面加载脚本、事件监听器等。

4.收集性能数据:通过监控工具收集前端应用的性能数据,包括用户行为数据、网络请求数据、资源加载数据等。

5.分析性能数据:对收集到的性能数据进行深入分析,找出性能瓶颈和潜在问题。常用的分析方法包括对比分析、趋势分析、瓶颈定位等。

6.调优与验证:根据分析结果进行前端性能调优,如优化代码结构、减少资源加载时间、提高渲染效率等。调优完成后,再次进行性能测试,验证调优效果。

7.监控与反馈:持续监控前端应用的性能表现,并根据实际情况进行反馈和调整。同时,将监控结果和调优经验分享给团队成员,共同提升前端开发质量。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

优化方案

图片

1. 减少HTTP请求

同样的展示效果,如果文件太多,就需要多次建立连接关闭连接,增加耗时。建议将多个小文件合并为一个大文件,减少HTTP请求次数,从而提高效率。

具体操作:

  • 使用webpack、gulp等打包工具对代码进行打包压缩;

  • 使用 css sprite(精灵图)将多个小图片放到一张或使用 font-awesome 将小图标生成矢量字体文件,只请求一次;

2. 使用 HTTP2

  • 解析速度快:服务器解析 HTTP1.1 的请求时,必须不断地读入字节,直到遇到分隔符 CRLF 为止。而解析 HTTP2 的请求就不用这么麻烦,因为 HTTP2 是基于帧的协议,每个帧都有表示帧长度的字段。

  • 多路复用:HTTP1.1 如果要同时发起多个请求,就得建立多个 TCP 连接,因为一个 TCP 连接同时只能处理一个 HTTP1.1 的请求。在 HTTP2 上,多个请求可以共用一个 TCP 连接,这称为多路复用。

  • 首部压缩:HTTP2可以对header建表建索引,对相同的header使用索引进行传输,更加快捷。

  • 优先级:HTTP2 可以对比较紧急的请求设置一个较高的优先级,服务器在收到这样的请求后,可以优先处理。

  • 服务端推送:HTTP2 新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。也就是说,客户端想要及时得到服务端的状态,再也不用定时发轮讯请求了,使用HTTP2,当服务端数据变化后直接通知客户端。

3. 使用服务端渲染

  • 客户端渲染: 获取 HTML 文件,根据需要下载 JavaScript 文件,运行文件,生成 DOM,再渲染

  • 服务端渲染:服务端返回 HTML 文件,客户端只需解析 HTML

4. 静态资源使用 CDN

内容分发网络(CDN)是一组分布在多个不同地理位置的 Web 服务器。我们都知道,当服务器离用户越远时,延迟越高。CDN 就是为了解决这一问题,在多个位置部署服务器,让用户离服务器更近,从而缩短请求时间。

5. 将 CSS 放在文件头部,JavaScript 文件放在底部

所有放在 head 标签里的 CSS 和 JS 文件都会堵塞渲染。如果这些 CSS 和 JS 需要加载和解析很久的话,那么页面就空白了。所以 JS 文件要放在底部,等 HTML 解析完了再加载 JS 文件。

那为什么 CSS 文件还要放在头部呢?

因为先加载 HTML 再加载 CSS,会让用户第一时间看到的页面是没有样式的、“丑陋”的,为了避免这种情况发生,就要将 CSS 文件放在头部了。

另外,JS 文件也不是不可以放在头部,只要给 script 标签加上 defer 属性就可以了,异步下载,延迟执行。

6. 善用缓存,不重复加载相同的资源

使用强制缓存或协商缓存策略对静态文件进行缓存。

7. 图片优化

  • 图片延迟加载,图片标签出现在页面上再对src赋值,进行图片的加载。

  • 响应式图片,对不同分辨率展示不同大小的图片。

  • 降低图片质量,例如 JPG 格式的图片,100% 的质量和 90% 质量的通常看不出来区别,尤其是用来当背景图的时候。我经常用 PS 切背景图时, 将图片切成 JPG 格式,并且将它压缩到 60% 的质量,基本上看不出来区别。

  • 尽可能利用 CSS3 效果代替图片,有很多图片使用 CSS 效果(渐变、阴影等)就能画出来,这种情况选择 CSS3 效果更好。因为代码大小通常是图片大小的几分之一甚至几十分之一。

  • 使用 webp 格式的图片,WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量,但是兼容性不是很好。

8. 减少重绘和回流

重绘:当重新生成渲染树后,就要将渲染树每个节点绘制到屏幕,这个过程叫重绘。

回流:当改变 DOM 元素位置或大小时,会导致浏览器重新生成渲染树,这个过程叫回流。

不是所有的动作都会导致重排,例如改变字体颜色,只会导致重绘。记住,重排会导致重绘,重绘不会导致重排 。

如何减少重排重绘?

  • 用 JavaScript 修改样式时,最好不要直接写样式,而是替换 class 来改变样式。

  • 如果要对 DOM 元素执行一系列操作,可以将 DOM 元素脱离文档流,修改完成后,再将它带回文档。推荐使用隐藏元素(display:none)或文档碎片(DocumentFragement),都能很好的实现这个方案。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

介绍 手上有一块立创开发板,本着不吃灰的原则把它用起来,今天就来用它来连接上自己部署的MQTT服务器进行数据通信。 硬件:立创开发板 开发环境:Arduino IDE Win11 MQTT 平台:EMQX Platform 立创开发板介绍&#xff1…

上海晋名室外危废暂存柜助力谐波传动减速器行业危废品安全储存

近日又有一台 SAVEST 室外危废暂存柜项目成功验收交付使用,此次项目主要用于谐波传动减速器行业危废品安全储存。 用户单位成立于1994年,是我国专业从事谐波传动减速器技术设计、开发、生产、销售、服务的高新技术实业公司。在日常工作运营中涉及到危废…

全是干货:融资融券(两融)名词科普!

一、两融内涵 融资融券,也被称为证券信用交易,其内涵主要涵盖以下方面: 首先,它指的是投资者向具有融资融券业务资格的证券公司提供担保物,并借入资金用于买入证券(融资交易)或借入证券并卖出&…

三次样条插值的实现(Matlab)

一、问题描述 三次样条插值的实现。 二、实验目的 掌握三次样条插值方法的原理,能够编写代码获得自然、抛物线端点以及非纽结三次样条。 三、实验内容及要求 找出并画出三次样条S,满足S(0) 1, S(1) 3, S(2) 3, S(3) 4, S(4) 2,其中…

Windows11 wsl2编译Android14 使用ASfP Debug windows上启动的模拟器

wsl2的安装和配置 安装: 直接百度搜索最新的wsl2安装教程即可,官网:https://learn.microsoft.com/zh-cn/windows/wsl/install 1. 启用适用于 Linux 的 Windows 子系统(以管理员身份打开 PowerShell 并运行) Enable-WindowsOptionalFeature…

基于大模型的智慧零售教育科研平台——技术方案

一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级,人工智能的积极作用越来越凸显,人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮,人工智能行业发展势…

每日练习之广义搜索——小红的素数合并

小红的素数合并 题目描述 运行代码 #include <iostream> #include<algorithm> using namespace std; typedef long long LL;// 定义一个常量表示数组最大长度 const int N 1e5 10; int n, a[N]; // 解决问题的函数 void solve() {// 输入数组长度cin >> …

【Python】浅析Python内存管理与GC机制

【Python】浅析Python内存管理与GC机制 从C语言引入&#xff1a;内存管理的挑战 C语言是一个强大的编程语言&#xff0c;它允许开发者直接控制内存。这种控制是通过以下方式实现的&#xff1a; 内存分配&#xff1a;使用 malloc、calloc 或 realloc 等函数分配内存。内存释放…

C++系列-类模板

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 类模板的定义格式&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; template<class T> class Stack { public:Stack(size_…

Mariadb操作命令指南

MariaDB简介 ​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性&#xff0c;因使用而带来的风险与本站无关&#xff01; 数据库应用程序与主应用程序分开存在&#xff0c;并存储数据集合。 每个数据库都使用一个或多个API来创建&#xff0c;访问&#xf…

恒创科技:无法与服务器建立安全连接怎么解决?

在使用互联网服务时&#xff0c;有时会出现无法与服务器建立安全连接的问题&#xff0c;此错误消息通常出现在尝试访问需要安全连接的网站(例如使用 HTTPS 的网站)时&#xff0c;这可能是由于多种原因造成的&#xff0c;以下是一些常见的解决方法&#xff0c;帮助你解决问题。 …

svg实现一个圆形以及方形的环形进度条

1. svg实现圆形进度条 效果图&#xff1a; 1. 写个假接口&#xff1a; let res {curLegendList: [{ progress: "87", name: "进度1",color:"#00fe41" },{ progress: "66", name: "进度2" ,color:"orange"},{ p…

看到大厂工时爆料,我沉默了。。

大厂工时爆料 今天逛脉脉的时候&#xff0c;看到一篇名为「一人一句&#xff0c;大厂工时爆料」的帖子&#xff1a; 点开之后&#xff0c;我沉默了 ... 出来爆料的基本上都是 10 小时。 好奇心之下&#xff0c;我搜索了一下去年很热的排行榜&#xff1a; 2023 年最新互联网公司…

if constexpr实现条件编译

#include <iostream>// 利用if constexpr实现了条件编译 template<typename T1, typename T2> void test_func() {if constexpr (std::is_same_v<T1, T2>) {std::cout << "hit stage\n";} else {std::cout << "miss\n";} }i…

IDEA 常用技巧

1、代码块整体移动 选中&#xff0c;tab整体右移选中&#xff0c;shifttab整体左 移 2、统一修改变量 3.方法分割线 seting >> editor >> apperance >> show method separators 4、快捷键 构造器、set与get方法、方法重写、toString 等快捷操 鼠标停留在…

启智CV机器人,ROS, ubuntu 18.04

资料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安装ros环境 装VM。 装ubuntu18.04 desktop.…

数字化的本质是什么?

数字化的本质其实就是把日常生活、工作等各个方面的信息、操作、交流等转化成数字形式&#xff0c;让它们更加便于存储、传输、分析和处理。简单说就是把各种各样的东西变成了0和1&#xff0c;让计算机能够更好地理解和运用这些信息。但数字化的本质并不只是简单地把事物变成数…

广告联盟四大家

国内四大广告承接商&#xff1a;①抖音旗下-穿山甲②快手旗下-快手联盟③百度旗下-百青藤④腾讯旗下-优量汇 我们目前在互联网上能看到的所有广告都是由他们发放的&#xff0c;在其中我们打小游戏复活看广告&#xff0c;获得道具看广告&#xff0c;看剧看广告&#xff0c;这…

springboot + Vue前后端项目(第十四记)

项目实战第十三记 写在前面1. 建立字典表2. 后端DictController3. Menu.vue4. 建立sys_role_menu中间表5.分配菜单接口6. 前端Role.vue改动总结写在最后 写在前面 本篇主要讲解动态分配菜单第二章节 菜单页面优化 引入图标 角色界面优化 角色自主分配菜单&#xff0c;并保存至…

透明度技术在AI去衣中的双刃剑作用

引言&#xff1a; 在当今这个数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。它不仅改变了我们的工作方式&#xff0c;还影响了我们的娱乐和社交活动。然而&#xff0c;随着AI技术的不断发展&#xff0c;一些伦理问题也逐渐浮出…