msprofiler前置知识:如何看懂tracing profile文件?

简介: Tracing是一种技术,用于收集程序执行过程中的事件,如函数调用、I/O操作等,特别适用于Web开发中的性能分析。Wall Duration指操作从开始到结束的实际时间,反映用户感知的性能。Self Time则专注于函数自身执行的时间,不包括调用其他函数的时间,有助于定位性能瓶颈。通过这些工具,开发者可以优化代码、减少延迟、管理资源,提升应用性能。

1 什么是tracing?

Tracing 是一种收集程序执行过程中事件的技术。它记录了程序运行时发生的事件,如函数调用、I/O操作、系统调用等。在Web开发中,Tracing 通常用于收集浏览器渲染页面时的性能数据,包括CPU活动、内存使用情况、网络请求等。

  • 用途:通过Tracing,开发者可以获得详细的性能指标,识别瓶颈所在,进而优化代码。
  • 工具:在Edge DevTools中,Performance面板提供了Tracing的功能,可以用来记录页面加载、交互等过程中的性能数据。
    打开Edge浏览器,在地址栏输入 edge://tracing,出来的界面如下。Chrome或者其它浏览器亦可,比如:
    chrome://tracing。
    image.png

点击Load,可以导入profiler生成的JSON文件。
操作:
按键盘w, a, s, d键,可以对profiler的结果进行缩放和移动。

鼠标托选其中一栏后,会显示出如下:
image.png

2 Wall Duration(壁钟持续时间)

Wall Duration(有时也称为wall clock time或elapsed time)指的是一个操作从开始到结束所经历的实际时间。这是指从用户的视角来看,完成某项任务所需要的时间,包括了等待时间、CPU时间以及其他任何影响最终完成时间的因素。

- 测量:Wall Duration是用户感知性能的重要指标,因为它反映了用户实际等待的时间。
- 影响因素:除了CPU执行时间外,还包括I/O等待、进程调度延迟等。

3 Self Time(自身时间)

Self Time 是指某个特定函数或方法在其内部执行所花费的时间,不包括其子函数或调用其他函数的时间。换句话说,Self Time 反映了直接在这个函数内部执行的操作所花费的时间。

  • 用途:Self Time 帮助开发者理解哪个函数本身是最耗时的,这对于定位性能瓶颈很有帮助。
  • 区分:与Total Time(或Cumulative Time,累计时间)不同,Total Time包括了函数及其所有子调用的时间。

    4 示例解释

    假设你在Edge DevTools中使用Performance面板进行了一次Tracing,你可能会看到类似下面的数据:

  • Tracing:记录了页面加载过程中的所有事件,包括网络请求、JavaScript执行、布局重绘等。

  • Wall Duration:显示了页面从开始加载到完全加载完成所花费的实际时间。
  • Self Time:对于每一个函数调用,展示的是该函数自身执行所花费的时间,而不包括它调用的其他函数的执行时间。
    通过这些信息,你可以更好地理解你的应用在运行时的行为,发现潜在的性能问题,并据此进行优化。

5 如何使用这些信息

当你在Edge DevTools中查看性能报告时,可以利用这些信息来:

  • 优化代码:通过查看Self Time较高的函数,可以找到需要优化的部分。
  • 减少延迟:通过关注Wall Duration,可以尝试减少页面加载时间,提升用户体验。
  • 资源管理:通过Tracing数据,可以发现哪些资源请求是不必要的,从而减少网络请求,优化资源加载流程。
    总的来说,Tracing、Wall Duration 和 Self Time 都是帮助开发者理解和改进应用程序性能的关键概念。通过这些工具和技术,开发者能够更深入地了解程序的执行情况,并据此做出优化决策。
相关文章
|
5月前
|
测试技术
Profile Config 多环境不同配置
Profile Config 多环境不同配置
41 0
|
6月前
|
C++ 开发者
cpplint 新增自定义checker介绍
通过为cpplint新增自定义规则,可以让 cpplint 更加贴合项目的编码规范,从而提高代码的质量和一致性。
102 0
|
7月前
|
Java Maven 数据库
|
7月前
|
存储 数据安全/隐私保护 虚拟化
CloudStack Agent 配置文件解析与含义
CloudStack Agent 配置文件解析与含义
|
8月前
|
测试技术
JMeter前置处理器-用户参数详解
JMeter是一款开源性能测试工具,其前置处理器功能强大,能模拟真实用户行为。本文聚焦于用户参数这一重要前置处理器,阐述了用户参数的作用域规则:全局(测试计划)、线程组或请求级别。通过实例展示了如何定义单个或多个用户值,并说明了“每次迭代更新一次”选项的影响。用户参数与用户定义变量的主要区别在于,前者可为参数分配多个值,且在变量名冲突时优先级更高。理解这些概念有助于优化JMeter的性能测试效率。
|
8月前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
431 0
|
存储 编解码 监控
h264与x264支持的Profile
h264与x264支持的Profile
167 0
|
存储
[✔️] lua profile细节逻辑
[✔️] lua profile细节逻辑
115 0
|
Java 测试技术 开发者
Profile 配置|学习笔记
快速学习 Profile 配置
346 0
Profile 配置|学习笔记
|
Java Shell Linux
解决shell脚本中"source /etc/profile"重载配置文件不生效的问题
1、shell脚本中“source /etc/profile”无法生效的原因及解决办法;2、shell中"."、"source"、"sh"、"./"的区别;
解决shell脚本中"source /etc/profile"重载配置文件不生效的问题