简介
应用App的启动速度能够影响用户的首次体验,启动速度较慢的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序,所以,APP的启动速度可以直接影响一个APP的留存率和转化率,做出一个良好体验的应用,一定要考虑它的启动性能优化问题。
启动性能优化问题,开发者需要达成的目标就是应用冷(热)启动无限接近或者超过性能指标。至于结果,就是给用户的感官体验越来越好,打开app的耗时少,并且整个转场过程不突兀。
应用启动概念
对于应用启动,首先,引入应用启动概念:
冷启动:首次打开app或者app彻底销毁后再次打开app。
热启动:应用运行中按home键再打开应用。
应用启动时间采集
OpenHarmony 应用启动时间采集目前主要使用以下2种方法:
预置条件
1.至少启动过一次APP,保证进入应用无任何弹窗提示;
2.PC端安装 avidemux2 工具;
3.一台支持8倍速慢动作拍摄的设备;
4.PC 端配置 hdc 工具;
视频拍摄:
1.使用慢动作相机打开八倍速慢动作开始记录手指点击桌面设置应用图标到应用完全打开的全部过程;
2.在PC 端使用工具 avidemux2 打开上述拍摄的视频;
3.通过单帧播放记录起点帧数和终点帧数;
4.通过时延公式 (终点帧数 - 起点帧数 )x 1000 / 240 计算出响应时延;
5.重复上述步骤5次,计算平均值,如果初出现偏差较大结果,单次结果作废;
起点帧数:手指离开屏幕第一帧
终点帧数:界面完全加载完成第一帧
基于 trace 计算:
1.使用 hdc 命令抓取应用启动的trace;
2.手指点击桌面设置应用图标到应用完全打开,等待trace 采集完毕;
3.使用 chrome 浏览器的tracing 插件打开采集到的trace 文件;
4.找到应用启动的 trace 采集起始点和结束点,使用插件中的标尺拉取两点之间的时间差;
5.重复上述步骤5次,计算平均值,如果初出现偏差较大结果,单次结果作废
采集起始点:StartAbility trace 节点前的最后一个 H:DispatchTouchEvent trace
采集结束点: H:RSMainThread::DoComposition trace 节点
备注:trace 采集参考文档:性能分析工具使用指导
应用冷启动流程
在OpenHarmony ,应用启动流程大致可以分为以下流程:
用户点击事件 --> 点击事件分发给大桌面 --> 大桌面应用启动动效 --> scenesession启动ability --> foundation启动进程 -->appSpawn 创建进程 --> 应用进程资源加载 -->英国威廉希尔公司网站
绘制。
案例介绍
下文,将基于设置应用,详细介绍如何进行冷启动的性能优化。
AppSpawn 预加载
可以通过预加载一些so,加快冷启动的速度。预加载so 配置在appspawn_preload.json文件中。
文件路径base/startup/appspawn/appspawn_preload.json
{
"napi" : [
......
"app.ability.AbilityStage",
"app.ability.UIAbility",
"app.ability.UIExtensionAbility",
"hilog"
]
}
资源调度
OpenHarmony 资源调度子系统提供了资源调度的能力,可以通过一定的配置,为系统的性能、功耗均衡调度提供决策依据,使应用的性能功耗达到最佳。资源调度子系统具体可参考 resourceschedule_resource_schedule_service等相关仓库的介绍。
在开发者手机中,通过cgroup_action_config.json文件配置了分组策略,通过socperf_resource_config.xml文件配置了性能提频,具体可以参考开发者手机vendor/hys/laphone/resourceschedule 目录下的内容。在开发者手机中,通过切核配置,将foreground分组配置到到了cpu 4-7大核,将前台应用跑到了中大核,提升了应用的启动和运行速度。
{
"jobs" : [
{
"name" : "init",
"cmds" : [
......
]
},
{
"name" : "init",
"cmds" : [
......
"write /dev/cpuset/foreground/cpuset.cpus 4-7",
]
}
]
}
启动窗口优化
窗口创建的过程中,会默认加载模态窗口,如果产品不需要模态窗口,可以通过修改配置文件去掉,达到节省启动时间的效果。
配置文件路径:foundation/window/window_manager/resources/config/rk3568/window_manager_config.xml
该文件也可能位于产品化配制的文件夹下,具体看产品是如何配置的。
<Configs>
<!--decor enable is true means app main window show decoration-->
<decor enable="false">
......
</decor>
<!--startWindowTransitionAnimation enable is true means startWindow replace with alpha animation-->
<startWindowTransitionAnimation enable="false">
......
</startWindowTransitionAnimation>
</Configs>