前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >实战技巧 DevEco Profiler 性能调优 Time

实战技巧 DevEco Profiler 性能调优 Time

作者头像
万少
修改于 2025-02-10 09:33:19
修改于 2025-02-10 09:33:19
9800
代码可运行
举报
运行总次数:0
代码可运行

实战技巧 DevEco Profiler 性能调优 Time

背景

DevEco Studio 开发工具中提供了 Profiler 面板,可以让我们在针对实际开发应用过程中碰到的一些性能相关的问题提供解决方案。如响应速度慢、动画卡顿、内存泄漏、发热、耗电快等等场景。其中 Profiler 提供了实时监控、深度录制等监控过程的功能。从分析的角度入手,主要有以下几个纬度进行分析:

场景

面板

基础耗时分析

Time

基础内存分析

Allocation

内存泄露分析

Snapshot

CPU 活动分析

CPU

冷启动分析

Launch

并行并发分析

Concurrency

加载丢帧分析

ArkWeb

网络诊断

Network

PixPin_2024-11-19_23-45-42
PixPin_2024-11-19_23-45-42

不过需要注意的是 Profiler 只能配合真机来使用,模拟器暂时不支持。

Time

Time 面板常见的需求是对应用中的函数耗时进行分析。函数作为应用开发基本的基石,一般常见的耗时工作都是放在函数中进行的。

Time 可以对同步函数和异步函数进行分析。还提供了很方便的一键跳转到源码的功能,给开发者调试代码提供了很高效率的保证。

调试素材

为了方便调试,我们提供了以下素材。

image-20241119235346173
image-20241119235346173
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { promptAction } from '@kit.ArkUI'

@Entry
@Component
struct Index {
  fn1() {
    this.fn2()
  }

  fn2() {
    this.fn3()
  }

  fn3() {
    this.fn4()
  }

  fn4() {
    promptAction.showToast({ message: `快速任务结束` })
  }

  build() {
    Column() {
      Button("快速任务")
        .onClick(() => {
          this.fn1()
        })

    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

设置函数名称

在模块的 build-profile.json5 中添加以下配置,否则采集到的函数可能都是匿名函数

entry/build-profile.json5 中 设置 strip 为 false

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "apiType": "stageMode",
  "buildOption": {
    "nativeLib": {
      "debugSymbol": {
        "strip": false
      }
    }
  },

选择应用和进程

点击菜单中的 Profiler,然后选择对应的设备和应用,进程会自动选中的。

image-20241119235643530
image-20241119235643530

然后选中 Time 菜单

image-20241119235903928
image-20241119235903928

开始跟踪,定位耗时任务

  1. 一切准备就绪后,点击创建 Session
  2. 然后点击 按钮开始录制
image-20241120000051504
image-20241120000051504
  1. 在录制过程中,开始使用你的应用来重现问题。操作完毕后,记得点击结束。完成这次流程的录制。
PixPin_2024-11-20_00-08-45
PixPin_2024-11-20_00-08-45

Time 面板介绍

在点击结束录制后,便能看到这个画面

image-20241120001739740
image-20241120001739740

ArkTS Callstack

方舟运行时函数调用泳道,基于时间轴展示 CPU 使用率和虚拟机的执行状态,以及当前调用栈名称和调用类型。由于隐私安全政策,已上架应用市场的应用不支持录制此泳道。

调用栈分类从语言层面分为 ArkTS、NAPI 以及 Native,从归属层面分为开发者代码以及系统代码。从这两个方面可以将调用栈类型归类如下:

  • ArkTS:程序正在执行 ArkTS 代码;
  • NAPI:程序正在运行的 NAPI 代码;
  • Native:程序正在执行的 Native 代码; 其中每一个类型的亮色灰色分别代表开发者和系统的代码。
image-20241120001849449
image-20241120001849449
  1. ArkTs Callstack 包含有开发者自己写的代码。点击它,会在下方显示详情面板
  2. Weight 表示函数的总耗时,Self 表示函数自身的耗时。如
image-20241120002136473
image-20241120002136473
  1. Heaviest Stack 表示是Details区域选择节点所处的耗时最长的完整调用栈
  2. 绿色部分表示开发者自己编写的代码,可以看见右侧还有对应的 fn1、fn2、fn3 等等。通过这个函数调用栈便可获知哪个函数比较行耗时了
  3. 此时,如果想要快速定位到源码,双击函数即可

User Trace

Time 面板一般直接用来分析同步代码,如果想要分析和定位异步代码,建议搭配 hiTraceMeter 接口配套 User Trace 使用

hiTraceMeter 接口

接口名

描述

hiTraceMeter.startTrace(name: string, taskId: number)

异步时间片跟踪接口,标记一个预跟踪耗时任务的开始。taskId 是 trace 中用来表示关联的 ID,如果有多个 name 相同的任务并行执行,则每次调用 startTrace 的 taskId 不同;如果具有相同 name 的任务是串行执行的,则 taskId 可以相同。

hiTraceMeter.finishTrace(name: string, taskId: number)

异步时间片跟踪接口,name 和 taskId 必须与流程开始的 hiTraceMeter.startTrace 对应参数值保持一致。

调试素材

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { hiTraceMeter } from '@kit.PerformanceAnalysisKit'

@Entry
@Component
struct Index {
  sleep(n: number) {
    const promise = new Promise<void>(resolve => {
      setTimeout(() => {
        resolve()
      }, n * 1000)
    })
    return promise
  }

  async asyncCb1() {
    hiTraceMeter.startTrace("异步长时任务", 1)
    await this.sleep(1)
    hiTraceMeter.finishTrace("异步长时任务", 1)
    await this.asyncCb2()
  }

  async asyncCb2() {
    hiTraceMeter.startTrace("异步长时任务", 2)
    await this.sleep(2)

    hiTraceMeter.finishTrace("异步长时任务", 2)
    await this.asyncCb3()
  }

  async asyncCb3() {
    hiTraceMeter.startTrace("异步长时任务", 3)
    await this.sleep(3)
    hiTraceMeter.finishTrace("异步长时任务", 3)
  }

  build() {
    Column() {
      Button("异步长时任务")
        .onClick(async () => {
          await this.asyncCb1()
          AlertDialog.show({ message: JSON.stringify('结束', null, 2) })
        })
    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

PixPin_2024-11-20_00-30-56
PixPin_2024-11-20_00-30-56

分析

image-20241120003154861
image-20241120003154861
  1. 展开 User Trace
  2. 可以看见 User Trace 泳道上存在粉色的 3 个异步任务
  3. 点击以上随便一个,可以在 detail 中看见这个函数的具体耗时

总结

开发应用或服务过程中,如果遇到卡顿、加载耗时等性能问题,开发者通常会关注相关函数执行的耗时情况。DevEco Profiler 提供的 Time 场景分析任务,可在应用/服务运行时,展示热点区域内基于 CPU 和进程耗时分析的调用栈情况,并提供跳转至相关代码的能力,使开发者更便捷地进行代码优化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HarmonyOS应用性能分析工具CPU Profiler的使用指南
本文档介绍应用性能分析工具CPU Profiler的使用方法,该工具为开发者提供性能采样分析手段,可在不插桩情况下获取调用栈上各层函数的执行时间,并展示在时间轴上。
小帅聊鸿蒙
2024/10/15
1720
HarmonyOS应用性能分析工具CPU Profiler的使用指南
iOS 性能优化 - TimeProfiler分析代码耗时
注意:要在release模式(或者自定义的其他的打包模式)下分析,原因在release模式下:
用户2932962
2019/08/29
5.2K0
iOS 性能优化 - TimeProfiler分析代码耗时
API13Bate版来了DevEco已更新快来看新功能吧
HarmonyOS 5.0.1 Beta3,是HarmonyOS开发套件基于API 13正式发布的首个Beta版本。该版本在OS能力上主要增强了C API的相关能力,多个特性补充了C API供开发者使用。
龙儿筝
2024/11/19
780
API13Bate版来了DevEco已更新快来看新功能吧
HarmonyOS 开发实践——同页面内抛滑操作响应时延问题分析思路&案例
响应时延计算公式 响应时延=硬件耗时+软件耗时(整个耗时,包含我们在trace上看的软件的耗时,机器本身的一个硬件耗时,一般硬件耗时大概在30ms左右,在trace上的起点到终点的时间加上30ms左右的硬件耗时和测试给出的实际耗时能对的上即可。)
小帅聊鸿蒙
2024/11/17
1320
HarmonyOS 开发实践——同页面内抛滑操作响应时延问题分析思路&案例
鸿蒙(HarmonyOS)性能优化实战-合理使用IPC通信
应用使用操作系统提供的IPC(Inter-Process Communication,进程间通信)机制进行跨进程通信是通用场景, 当前系统基于Binder驱动封装了一套IPC机制,提供了应用和系统服务间的跨进程通信能力。
小帅聊鸿蒙
2024/10/22
2750
鸿蒙(HarmonyOS)性能优化实战-合理使用IPC通信
深入研究Android启动速度优化(上)- 看完这些启动优化已经完成80%了
启动是指用户从点击 icon 到看到页面首帧的整个过程,启动优化的目标就是减少这一过程的耗时。启动性能是 APP 使用体验的门面,启动过程耗时较长很可能导致用户使用 APP 的兴趣骤减。提高启动速度是每一个 APP 在体验优化方向上必须要做的关键技术突破。
Rouse
2024/05/09
1.9K0
深入研究Android启动速度优化(上)- 看完这些启动优化已经完成80%了
149. 精读《React 性能调试》
在数据中台做 BI 工具经常面对海量数据的渲染处理,除了组件本身性能优化之外,经常要排查整体页面性能瓶颈点,尤其是维护一些性能做得并不好的旧代码时。
黄子毅
2022/03/14
9650
149. 精读《React 性能调试》
HarmonyOS 开发实践——基于ArkUI页面切换类点击操作完成时延问题分析思路&案例
ArkUI页面切换类点击操作完成时延,应用的UI界面有许多需要和用户交互的地方,按钮的点击是很常见的一种。点击按钮应用转场进入下一个页面。应用的点击完成时延,是从点击应用离手开始到转场页面所有占位符加载完成.
小帅聊鸿蒙
2024/11/15
1060
HarmonyOS 开发实践——基于ArkUI页面切换类点击操作完成时延问题分析思路&案例
ANR 原理与实战技巧
00 手机用用,就卡卡卡。莫名其妙的出现一堆程序无响应,欲哭无泪。这是为什么呢?因为你用的android手机。 android手机,为了让手机卡的不成样子,还想让用户知道,就发明了A
用户1263308
2018/02/02
1.9K0
ANR 原理与实战技巧
React性能测量和分析
上一篇文章讲了 React 性能优化的一些方向和手段,这篇文章再补充说一下如何进行性能测量和分析, 介绍 React 性能分析的一些工具和方法.
_sx_
2019/08/07
2.3K0
React性能测量和分析
Xcode里的Instruments工具:Leaks、Allocations、Time Profiler、Automation
显示如图,并按下键盘:command+R 运行app,此时手动操作app查看内存泄露
Python疯子
2018/09/06
2.6K0
Xcode里的Instruments工具:Leaks、Allocations、Time Profiler、Automation
HarmonyOS 开发实践 —— 冷启动首帧完成时延问题分析
冷启动首帧完成时延:指的是应用冷启动时,从点击离手开始到应用进程首帧送显上屏显示的这一段时间,称为冷启动首帧完成时延。
小帅聊鸿蒙
2024/12/02
1530
HarmonyOS 开发实践 —— 冷启动首帧完成时延问题分析
小红书鸿蒙 OS 下的性能优化探索与实践
随着互联网技术的快速发展,大前端领域正经历着前所未有的变革。从传统的 Web 开发到移动应用、小程序、IoT、乃至新兴的 AR/VR,大前端技术不仅需要适应越来越多样化的需求场景,还面临着如何更高效地利用现有资源、提升用户体验等挑战。与此同时,AI 等新技术的发展为解决这些问题提供了新的思路和工具。在即将于 4 月 10 日召开的 QCon 全球软件开发大会(北京站),我们策划了「越挫越勇的大前端」专题,将深入探讨大前端技术在当前及未来一段时间内的演进趋势及其实践案例。欢迎围观:https://qcon.infoq.cn/2025/beijing/track/1763
深度学习与Python
2025/04/09
1220
小红书鸿蒙 OS 下的性能优化探索与实践
ArkTS 入门指南:快速上手鸿蒙应用开发
ArkTS 是基于 TypeScript 的一种编程语言,主要用于鸿蒙应用的 UI 界面和业务逻辑开发。TypeScript 是一种 JavaScript 的超集,为开发大型应用添加了类型检查和其他特性,如类、接口、模块等。ArkTS 在 TypeScript 的基础上,进行了一些针对鸿蒙系统的优化和定制。
陆业聪
2024/07/24
1.1K0
ArkTS 入门指南:快速上手鸿蒙应用开发
使用 Android Studio Profiler 工具解析应用的内存和 CPU 使用数据
为了帮助开发者开发出更加轻快高效的应用,我们在 Android Studio 3.0 以及更高版本中加入了 Android Profiler 工具,用于应用的 CPU、内存、网络和能耗分析。
Android 开发者
2020/06/28
3.4K0
使用 Android Studio Profiler 工具解析应用的内存和 CPU 使用数据
鸿蒙APP的性能测试
鸿蒙(HarmonyOS)应用的性能测试是确保应用在各种设备上流畅运行、资源消耗合理以及用户体验良好的关键步骤。以下是鸿蒙 APP 性能测试的详细流程和方法,涵盖了启动性能、内存使用、CPU 占用、网络请求、UI 渲染等方面的测试。
数字孪生开发
2025/02/20
2100
鸿蒙APP的性能测试
HarmonyOS Next 并发 taskpool 和 worker
并发,指的是同一时间内,多段代码同时执行。在ArkTs编程中,并发分为异步并发和多线程并发。
万少
2025/02/09
780
HarmonyOS Next 并发 taskpool 和 worker
【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
在 Android 中 , 出现 动画掉帧 , 页面切换白屏 , 卡顿 , ANR 等情况 , 说明应用该进行 CPU 优化了 , CPU 优化主要是针对 线程 进行优化 , 如将耗时操作从主线程转移到子线程或服务 , 检查是否有线程没有及时关闭的泄漏情况 ;
韩曙亮
2023/03/29
1.4K0
【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
Android 性能分析学习(CPU Profiler)
应用开发过程中大部分时间都是在进行需求开发,而性能分析却进行的很少。 这里将介绍通过CPU Profiler工具来进行app的性能分析。
艳龙
2021/12/16
3.2K0
Android 性能分析学习(CPU  Profiler)
鸿蒙(HarmonyOS)安全和高效的使用N-API开发Native模块
N-API 是 Node.js Addon Programming Interface 的缩写,是 Node.js 提供的一组 C++ API,封装了 V8 引擎 的能力,用于编写 Node.js 的 Native 扩展模块。通过 N-API,开发者可以使用 C++ 编写高性能的 Node.js 模块,同时保持与 Node.js 的兼容性。
小帅聊鸿蒙
2024/07/24
3950
鸿蒙(HarmonyOS)安全和高效的使用N-API开发Native模块
推荐阅读
相关推荐
HarmonyOS应用性能分析工具CPU Profiler的使用指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验