首页 > 其他分享 >前端性能测试 - 页面运行性能测试场景拓展

前端性能测试 - 页面运行性能测试场景拓展

时间:2024-01-24 14:37:26浏览次数:30  
标签:动画 测试 性能 FPS var now 页面

前言

对于前端场景复杂且需保持常态开启的页面(例如在线表格、高频大屏),客户在实际应用场景中长时间使用会很容易出现性能问题。但是在测试场景下,并不是那么容易观察到,为了更好的评估和描述出现的问题,当前主要对页面性能场景作以下分类:

  • 下载页面性能表现
  • 运行时性能表现

这篇文章主要跟大家分享如何分析页面性能问题与页面运行性能测试。

下载页面性能表现

主要表现在等待页面完成显示时间较长,时间耗费在资源返回和页面完成渲染上。

当前加载页面的主要流程可以描述为: DNS 解析=>TCP 连接=>HTTP 请求抛出=>服务端处理请求,HTTP 响应返回=>浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户

其中各个环节均有可能出现问题: HTML 的解析和渲染(页面复杂度)、服务端处理的速度(负载均衡,缓存策略)、客户端带宽(网络状况)

而且这些场景当前以及具有相当多的一部分成熟工具可以进行分析:

  • 页面复杂度测试:sitespeed、yslow等前端性能监控工具
  • 主要指标:白屏时间、首屏时间、用户可操作时间
  • 服务端处理的速度测试:httprunner、loadrunner、jmeter等
  • 主要指标:请求响应时间、并发用户数、每秒通过事务数
  • 客户端带宽:限流工具

运行时性能表现

主要表现为页面动画卡顿、帧数低,当前大部分需在线交互频繁的页面在处理返回结果的同时会有大量解压缩、js处理,造成CPU和内存损耗(内存泄漏),这些问题映射到用户处,最直观的体现就是页面交互动画帧率变低。

因此测试时主要关注以下指标:

FPS(帧率)

不同帧率的体验:

  • 帧率能够达到 50 ~ 60 FPS 的动画将会相当流畅,让人倍感舒适;
  • 帧率在 30 ~ 50 FPS 之间的动画,因各人敏感程度不同,舒适度因人而异;
  • 帧率在 30 FPS 以下的动画,让人感觉到明显的卡顿和不适感;
  • 帧率波动很大的动画,亦会使人感觉到卡顿。

手工观测帧率的办法(chrome)-实时观测:

1.打开待测页面后,按F12(开发者工具),再按ctrl+shift+P,输入FPS,选择show framres per secord(FPS)meter

前端性能测试 - 页面运行性能测试场景拓展_性能测试

2.主要需要注意的是帧率

前端性能测试 - 页面运行性能测试场景拓展_软件测试_02


录制观测帧率、CPU、内存的办法(chrome)-录制分析:

1.同样是打开待测网站后打开f12

2.切换至performance标签页,勾选screenshots和memory,点击录制按钮

前端性能测试 - 页面运行性能测试场景拓展_sitespeed.io_03

3.录制完成后点击停止,即可查看性能面板

前端性能测试 - 页面运行性能测试场景拓展_前端性能_04

4.查看此期间的帧率、内存和CPU关系(当前chrome可以自动分析一部分的问题,类似图中标红的部分为chrome分析后有问题的地方)

前端性能测试 - 页面运行性能测试场景拓展_sitespeed.io_05

在这个性能面板所记录的四个窗格:

  • Controls: 包括开始记录,停止记录和配置记录期间捕获的信息;
  • overView: 页面性能的高级汇总。包括fps, cpu, net;
  • 火焰图。:cpu堆叠追踪的可视化;
  • Detail:选择事件之后,此窗格会显示与改时间有关的更多信息。

自动前端性能测试拓展

通过以上方式已经可以确定到这个页面的前端性能表现是否存在问题,那么下一步就是如何将以上测试融入日常构建与自动化测试中。我网上找到了一个借助 requestAnimationFrame API 实时计算FPS的方法,实测后与show framres per secord(FPS)meter显示数值会存在差距,但是数值的确跟着页面卡顿进行波动。可以将其插入当前的自动化测试步骤中,对上线前后和版本迭代的前端性能进行常态化跟踪,下面是从大神帖子里复制出来的代码:

【前端性能】Web 动画帧率(FPS)计算 https://www.cnblogs.com/coco1s/p/8029582.html

var rAF = function () {
    return (
        window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        function (callback) {
            window.setTimeout(callback, 1000 / 60);
        }
    );
}();
  
var frame = 0;
var allFrameCount = 0;
var lastTime = Date.now();
var lastFameTime = Date.now();
  
var loop = function () {
    var now = Date.now();
    var fs = (now - lastFameTime);
    var fps = Math.round(1000 / fs);
  
    lastFameTime = now;
    // 不置 0,在动画的开头及结尾记录此值的差值算出 FPS
    allFrameCount++;
    frame++;
  
    if (now > 1000 + lastTime) {
        var fps = Math.round((frame * 1000) / (now - lastTime));
        console.log(`${new Date()} 1S内 FPS:`, fps);
        frame = 0;
        lastTime = now;
    };
  
    rAF(loop);
}
 
loop();

参考文档

使用performance工具分析运行时性能https://www.cnblogs.com/Imflyer/p/9029034.html

【前端性能】Web 动画帧率(FPS)计算https://www.cnblogs.com/coco1s/p/8029582.html

【sitespeed】前端性能测试实践https://www.sitespeed.io/documentation/sitespeed.io/web-performance-testing-in-practice/

标签:动画,测试,性能,FPS,var,now,页面
From: https://blog.51cto.com/u_12460926/9395436

相关文章

  • 软件单元测试报告
    ......
  • 软件单元测试计划
    ......
  • 条件测试语句和if流程控制语句的使用
    1、read命令read是一个在Unix/Linuxshell中用于从用户输入读取数据的命令。它允许您在脚本中接收用户的键盘输入,并将输入存储到变量中,以便后续处理。以下是一些read命令的示例用法:读取用户输入:echo"What'syourname?"readnameecho"Hello,$name!"在这个例子中,read......
  • 整机性能和2D性能测试 Unixbeach
    一.工具介绍前言UnixBench是一款开源的测试unix系统基本性能的工具,是比较通用的测试VPS性能的工具,会测试系统各个方面一系列的性能,然后将每个测试结果和一个基准值进行比较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分数值,也支持多CPU系统的测试,默认的行......
  • 使用rpa打开浏览器并执行js抓取页面元素详情步骤
    这里我们专门开一个文章来写如何在rpa中执行js获取页面元素。个人觉得,复杂点的需求用js会方便很多,所以后续的文章我都会重点使用js去获取页面元素。好,正文开始,我们先看一下rpa为我们提供的自带的方便的抓取元素的方式,我们还是以小红书为例,还是以上一个例子为例,上个例子我们使......
  • CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南
    一、背景介绍CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案。详细内容可以参考之前文章。有了群体之后,它们被广泛的应用到支付,消金,财富,营销等各种核心业务的用户拉新,交易转化,促活等核心链路中。而人群应用方式......
  • CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南
    一、背景介绍CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案。详细内容可以参考之前文章。有了群体之后,它们被广泛的应用到支付,消金,财富,营销等各种核心业务的用户拉新,交易转化,促活等核心链路中。而人群应用方式中,基......
  • centos下jmeter做性能测试
    windows下jmeter做性能测试,保存会生成一个察看结果树.jmx——这个jmx就是你写的性能脚本,比如你设置的接口地址、参数、用例csv文件,用例路径,cpu.jtl(linux服务器上cpu、内存等监控信息)路径等在centos下做性能测试时,将jmx、数据用例.csv或.txt迁移到linux服务器下,比如放在/usr/local......
  • MFC 简单的界面切换测试主窗体类似控件的方式嵌入其他窗体
    ▲类向导->MFC类创建两个子窗体。1。创建两个子窗体。2。属性设置:1)、“Style”选择“Child”;中文版“样式”选择“下层”。2)、“Border”为“None”;中文版“边框”选择“无”。3。主窗体中实例子窗体对象:声明:private:CSubForm1*m_CSubForm1;CSubForm2*m_CSu......
  • postman 接口测试工具常见用法
    postman不适合做压力测试工具postman接口测试工具,并不适合做压力测试,实际上即便把循环间隔设置为0,postman的请求频率依旧不高,postman是等待接口响应完成以后再发送下一个请求,所以postman是测不到并发问题的,jmeter可以做到异步请求,请求发的飞快,有并发测试要求或者需要比较强的压......