概览:本文介绍了鸿蒙应用优化的基本概念与实施方法,讲解了优化工具的分类以及实际操作,重点介绍了Code Linter、AppAnalyzer、ArkUI Inspector以及Profiler的使用。
什么是性能优化?
定位和解决应用或元服务在运行期间可能出现启动白屏、动画不流畅、操作卡顿、手机发烫 甚至崩溃闪退等问题。
性能优化工具
css
检测工具:
Code Linter-静态扫描工具
AppAnalyzer-动态运行工具
直接发现问题、提供解决方案
分析工具:
ArkUl Inspector-界面状态分析工具
Profiler-性能实时监测工具
得到应用和设备的运行状态 ,根据运行状态发现问题、制定解决方案
检测代码:
less
@Entry
@Component
struct Index {
@State list: number[] = Array(15).fill(1)
build() {
Column() {
Button('添加10条数据')
.onClick(() => {
this.list.push(...Array(10).fill(1))
})
Scroll() {
Column() {
ForEach(this.list, (item: number, index: number) => {
ListItem() {
Text(`第${index + 1}个Text`)
.width('100%')
.height(50)
.backgroundColor(index % 2 === 0 ? '#FFF0F0' : '#FFFFFF')
}
})
}
}
.layoutWeight(1)
}
.width('100%')
.height('100%')
}
}
Code Linter (静态扫描工具)
选中单个或多个工程文件目录后,点击右键 ,选择菜单CodeLinter下的全量检测或增量检测。

配置文件:项目根目录下的code-linter .json5,如未配置按照默认编程规范对ets 文件进行检测。
代码检测规则: developer.huawei.com/consumer/cn...
双击查看出现问题的位置,右侧有原因和修改建议,documentation(文档)、best practice(最佳实践)。

AppAnalyzer(动态运行工具)
打开编辑器,找到菜单栏Tools窗口,选择AppAnalyzer。
未下载python会提示下载,选择设备(真机) ,按需选择性能体检套餐,开始检测。

ArkUl Inspector(界面状态分析工具)
打开编辑器,在下方导航栏,选择ArkUI Inspector。
将程序安装至设备后启动 ,选择需要分析的程序,等待分析结果。
观察页面会显示多少个组件,不显示的组件没必要渲染,修改组件数量,可看到左边组件树减少。

Profiler(性能实时监测工具)
将应用运行至设备(真机)。
打开编辑器底部的Profiler,选择监测的设备、应用、进程 ,点击实时监控选项卡的 Start 开启监测。
scss
System Events(系统事件状态的统计情况)
Anomaly(设备侧上报的异常事件)
Foreground Ability(当前展示的Ability)
CPU(CPU使用率及空闲情况)
Memory(应用内存值、其他进程内存、空闲情况)
FPS(当前设备屏幕的帧率瞬时值 )
GPU(GPU使用率的瞬时值)
Temperature(当前温度信息,采集周期3秒)
DeviceCurrent(当前设备最大、平均、最新电流值)
Energy(各项数据周期内平均功耗占比)

Profiler 监测录制:
选择录制模版(常用Launch、Frame、Allocation)。
点击Create Session创建会话。
点击start开始录制,进行设备操作 ,点击停止自动保存录制,解析后查看分析结果。
1、Launch(重点关注冷启动过程):
观察创建10000个组件和创建10个组件的差异。
关注ArkTs Callstack的ArkVM(方舟编译器的运行时间)program(程序耗时)。

2、Frame(关注丢帧情况):
点击两次增加数据,页面更新,点击stop停止录制。
关注Frame,Jank Count(丢帧次数)。

Duration每一帧8毫秒左右,超过就丢帧,点击Open Layout查看做什么丢帧了。

从添加10条数据改成5条就不丢帧了(因为每一次绘制的数据量稍微大一点,超出了预期时间,所以在这一 帧要不没办法完成,要不没办法开始导致丢帧,可以减少数据量)。
3、Allocation(内存状况):
点数新增数据,点击频繁一些,不断新增数据,右侧黄色泳道不断上升,内存量上升了。
Memory查看每时每刻内存的一个占用情况。

Native Allocation 的 call Trees查看堆调用次数,如果是黄色的点击查看详细情况,如果是灰色的表示已经到底层了就不能查看了。
