调优是通过优化应用程序提高运行速度、资源利用效率和响应时间的过程。通过对应用程序进行细致的调优,可以使应用程序更高效、更稳定。在当今数字化时代,随着应用程序变得越来越复杂和庞大,调优变得尤为重要。一个经过有效调优的应用程序不仅可以更高效地运行,还能提高应用的稳定性,提升程序的效率,减少资源的浪费,从而为用户带来更好的体验。因此,了解调优的方法和常用工具对于开发人员至关重要。
调优的过程通常包括现场复现、问题分析、确定解决方案和性能测试这几个关键步骤。现场复现是指在具体环境中复现问题,以便更好地分析和解决。问题分析阶段则是深入分析应用程序的性能瓶颈和问题根源,为后续优化提供指导。确定解决方案是根据问题分析的结果,制定具体的优化方案和措施。最后,性能测试是验证调优效果的关键步骤,通过对优化后的应用程序进行性能测试,评估改进效果。
为了有效进行调优工作,需要借助一些常用的工具。例如,性能分析工具DevEco Profiler可以监测应用的性能指标、录制Trace记录,开发者可以通过分析Trace数据,发现代码中的性能瓶颈,进而优化性能。
本文将介绍调优的方法和常用工具,帮助开发者更好地分析和解决应用程序中的性能问题,提升用户体验,实现应用程序的高效稳定运行。

性能调优贯穿于HarmonyOS应用开发的整个生命周期中,开发前有性能最佳实践和指南等赋能套件让开发者快速上手学习,开发过程中有性能工具开发套件覆盖应用开发各阶段,应用开发完成上架后有专业的性能测试工具检查测试应用性能指标。目前DevEco Studio主要集成了四种性能工具,在不同的开发阶段各有侧重,主要分为性能问题检测类工具和性能问题分析类工具。本文重点介绍使用性能问题检测类工具来检测应用性能问题。
介绍
静态检测工具,白盒检查代码性能问题。可配置开发者关注的性能规则,扫描结果支持跳转到代码,性能规则详情或者官网的最佳性能实践指导。
使用方法
在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查。如图所示输入@performance,过滤性能检查结果。

详细使用指导见:
静态性能规则全集见:
介绍
应用与元服务体检工具用于对应用和元服务进行本地测试体检,并给出体检报告、分析指导以及修改建议,帮助开发者提升应用与元服务质量。在体检过程中,工具会收集应用或元服务的trace信息、代码栈、内存快照以及应用或元服务页面的截屏,并保存在本地工程目录.appanalyzer下,帮助开发者快速进行问题分析定位。
使用方法
启动DevEco Studio,连接设备,打开应用,依次执行以下操作:
在使用AppAnalyzer工具前,请确保完成以下准备工作:
1、应用已配置签名signingConfigs。
2、确认模块Product配置正确。
3、关闭代码混淆:在模块级build-profile.json5配置文件中关闭代码混淆,详见:字段说明。
4、将编译模式Build Mode设置为release。








详细使用指导见:
应用体检工具集成性能规则见:
DevEco Testing为开发者提供了稳定性、性能、应用基础质量等专项测试服务。通过DevEco Testing进行场景化性能测试,可检测出应用相关场景的性能问题,生成测试报告。为进一步分析定位应用问题,可将Testing测试报告导入至体检工具AppAnalyzer,从而对应用进行本地测试体检与优化。

Testing测试报告导入体检工具分析的过程主要包括以下步骤。
使用DevEco Testing进行场景化性能测试,支持编写测试脚本和自定义测试场景对应用性能进行评估。具体使用方法和指导请见:场景化性能测试。

查看测试结果
根据DevEco Testing检测结果,查看是否存在页面间转场等场景不达标的问题。

获取测试报告
点击导出IDE体检文件按钮,跳转至报告文件本地路径,获取DevEco Testing体检测试报告。

通过DevEcoTesting发现问题后,为深入分析问题,可将获取的体检报告导入体检工具AppAnalyzer进行具体定位和优化。打开DevEcoStudio,点击AppAnalyzer图标进入AppAnalyzer页面,随后点击“体检历史”按钮,跳转至历史记录页面。

点击“导入报告”,即可将Testing测试诊断出的体检文件导入体检工具进行解析。



检测报告导入前注意事项:
1、请导入和当前工程包名一致的检测报告文件。
2、请确认当前工程代码和被检测应用的版本是否一致。如果不一致,会导致诊断报告源码跳转代码行功能不准确。
3、如果被检测应用为应用市场上架版本,无法获取应用堆栈,会导致某些诊断规则无法执行。
解析完成后,会生成测试报告和详情报告。通过测试报告,可以定位出性能问题的页面截图、检测指标和检测结果等。
静态检测工具
规则ID(@规则集/规则) | 针对的性能场景 | 级别 | 规则描述与参考优化方案链接 |
|---|---|---|---|
@performance/sparse-array-check | 通用性能场景-ArkTs编程规范 | suggestion | 建议避免使用稀疏数组。 |
@performance/number-init-check | 通用性能场景-ArkTs编程规范 | suggestion | 该规则将检查number是否正确使用。 |
@performance/typed-array-check | 通用性能场景-ArkTs编程规范 | suggestion | |
@performance/hp-arkui-image-async-load | 丢帧-通用丢帧 | suggestion | 建议大图片使用异步加载。 |
@performance/hp-arkui-load-on-demand | 丢帧-滑动丢帧 | warn | 建议使用按需加载。 |
@performance/hp-arkui-remove-container-without-property | 丢帧-通用丢帧 | suggestion | 建议尽量减少视图嵌套层次。 |
@performance/hp-performance-no-closures | 通用性能场景-ArkTs编程规范 | suggestion | |
@performance/hp-arkui-avoid-empty-callback | 通用性能场景-ArkUI编程规范 | suggestion | |
@performance/hp-arkui-no-state-var-access-in-loop | 丢帧-通用丢帧 | warn | |
@performance/hp-arkui-use-local-var-to-replace-state-var | 丢帧-通用丢帧 | warn | 建议使用临时变量替换状态变量。 |
@performance/hp-arkui-use-row-column-to-replace-flex | 丢帧-通用丢帧 | suggestion | |
@performance/hp-arkui-combine-same-arg-animateto | 丢帧-动效丢帧 | warn | |
@performance/hp-arkui-no-func-as-arg-for-reusable-component | 丢帧-滑动丢帧 | warn | |
@performance/hp-arkui-set-cache-count-for-lazyforeach-grid | 丢帧-滑动丢帧 | suggestion | 建议在Grid下使用LazyForEach时设置合理的cacheCount。 |
@performance/hp-arkui-use-object-link-to-replace-prop | 丢帧-通用丢帧 | warn | |
@performance/hp-arkui-use-reusable-component | 丢帧-滑动丢帧 | warn | 建议复杂组件的定义,尽量使用组件复用。 |
@performance/hp-arkui-use-scale-to-replace-attr-animateto | 丢帧-动效丢帧 | warn | |
@performance/hp-arkui-use-word-break-to-replace-zero-width-space | 通用性能场景-ArkUI编程规范 | suggestion | |
@performance/hp-arkui-remove-redundant-nest-container | 丢帧-通用丢帧 | suggestion | |
@performance/high-frequency-log-check | 通用性能场景-高耗时函数处理 | warn | |
@performance/hp-arkui-use-grid-layout-options | 丢帧-通用丢帧 | warn | |
@performance/hp-arkui-avoid-update-auto-state-var-in-aboutToReuse | 丢帧-通用丢帧 | suggestion | |
@performance/hp-arkui-replace-nested-reusable-component-by-builder | 丢帧-通用丢帧 | warn | |
@performance/hp-arkui-suggest-reuseid-for-if-else-reusable-component | 丢帧-滑动丢帧 | warn | |
@performance/hp-arkui-use-onAnimationStart-for-swiper-preload | 丢帧-滑动丢帧 | warn | |
@performance/hp-arkui-no-stringify-in-lazyforeach-key-generator | 丢帧-滑动丢帧 | warn | |
@performance/start-window-icon-check | 响应时延-冷启动响应时延 | suggestion | |
@performance/waterflow-data-preload-check | 丢帧-滑动丢帧 | suggestion | |
@performance/hp-arkui-use-attributeUpdater-control-refresh-scope | 丢帧-通用丢帧 | suggestion | |
@performance/hp-arkui-use-id-in-get-resource-sync-api | 通用性能场景-高耗时函数处理 | suggestion | |
@performance/hp-arkui-use-transition-to-replace-animateto | 丢帧-动效丢帧 | warn | |
@performance/hp-arkui-remove-redundant-state-var | 丢帧-通用丢帧 | suggestion | |
@performance/hp-arkui-use-taskpool-for-web-request | 完成时延-应用内点击完成时延 | warn | |
@performance/hp-arkui-remove-unchanged-state-var | 丢帧-通用丢帧 | suggestion | 建议移除未改变的状态变量设置。 |
@performance/hp-arkts-no-use-any-export-current | 完成时延-冷启动完成时延 | warn | |
@performance/hp-arkts-no-use-any-export-other | 完成时延-冷启动完成时延 | warn | |
@performance/hp-arkui-suggest-cache-avplayer | 音视频播放-启播速度 | warn | |
@performance/hp-arkui-suggest-use-effectkit-blur | 丢帧-通用丢帧 | suggestion | |
@performance/multiple-associations-state-var-check | 丢帧-通用丢帧 | suggestion | 多个组件关联同一数据时,建议在组件中使用@Watch装饰器添加更新条件,避免不必要的组件更新。 |
@performance/foreach-args-check | 丢帧-滑动丢帧 | warn | |
@performance/constant-property-referencing-check-in-loops | 通用性能场景-ArkTs编程规范 | suggestion | 在循环如需频繁访问某个常量,且该属性引用常量在循环中不会改变,建议提取到循环外部,减少属性访问的次数。 |
@performance/hp-arkui-reduce-pangesture-distance | 响应时延-应用内点击响应时延 | suggestion | 建议设置合理的拖动距离。 |
动态运行工具规则请参阅性能。