HarmonyOS开发5.0【冷启动、时延】

一、基本概念

通常App性能通过以下几个方面来进行分析和优化

  • 冷启动
  • 响应时延、完成时延
  • 丢帧、卡顿
  • 内存大小、泄露
  • CPU
  • 包大小
  • 耗电情况

鸿蒙现阶段比较关注的是冷启动、点击响应(响应时延)、页面渲染完成(完成时延)、滑动加载完成、滑动帧率几个方面

二、冷启动

1、定义

  • 应用启动时,后台没有该应用的进程,需要创建一个进程分配给该应用。建议冷启动时间为<=1100ms。
  • 主要包括点击桌面图标->图标发生变化(点击响应时延)->应用首帧渲染->应用首页加载完成并可操作(加载完成时延)

2、主要流程

1

2.1 应用进程创建&初始化阶段

该阶段主要是系统完成应用进程的创建以及初始化的过程,包含了启动页图标(startWindowIcon)的解码。

2.2 Application&Ability初始化

该阶段主要是资源加载、虚拟机创建、Application&Ability相关对象的创建与初始化、依赖模块的加载等。

  • 文件加载:查找并解析所有的文件到模块中记录。
  • 依赖模块解析(实例化):分配内存空间来存放模块所有导出的变量,此时内存中并没有分配变量的值。
  • 文件执行:运行.ets文件,将内存中之前未分配值的变量赋为真实的值。

2.3 Ability/AbilityStage生命周期

该阶段主要是AbilityStage/Ability的启动生命周期,执行相应的生命周期回调。

2.4 加载绘制首页

该阶段主要是加载首页内容、测量布局、刷新组件并绘制。

2.5 网络数据二次刷新

该阶段主要是应用根据业务需要对网络数据进行请求、处理、二次刷新。

3、优化点

3.1 缩短应用进程创建&初始化阶段耗时

  • 主要是系统完成应用进程的创建以及初始化的过程,包含了启动页图标(startWindowIcon)的解码,建议使用不超过256*256分辨率的图片作为启动页面图标,以减少图片解码带来的时延。

3.2 缩短Application&Ability初始化和生命周期耗时

  • 尽量不要执行耗时任务,可通过异步任务或延迟处理。
  • import模块按需加载,移除初始化阶段不需要的模块导入,动态加载耗时的模块。
  • 单HAP场景下,模块推荐使用多HAR,不推荐使用HSP

3.3 缩短首页渲染完成耗时

  • 网络请求预加载,提前在AbilityStage/UIAbility的onCreate()生命周期中发请求、网络缓存
  • 使用合理的布局结构、使用懒加载等UI优化方法来减少首页绘制时间。

三、时延

1、指标

1.1 响应时延

手指点击从离开屏幕到页面发生变化,建议响应时延应<=100ms。 点击后如果会有耗时操作,可以增加loading或者先修改UI状态

1.2 页面完成时延

手指从页面加载开始到应用所有占位符加载完成所需要的时间,建议完成时延≤900ms

1.3 滑动响应时延

手指从滑动到页面发生变化的时间。只要没有滑动冲突的相关问题,一般不需要特别优化。 抛滑(速度大于300mm/s )场景:触屏响应时延应<=80ms; 拖滑(速度小于100mm/s)场景:触屏响应时延应<=60ms。

1.4 滑动停止加载完成时延

在可滚动页面,当停止滚动开始算,到屏幕中占位符加载完成。建议完成时延≤100ms。

2、关于优化

主要是完成时延的优化,跟丢帧卡顿问题解决方案差不多,主要是ArkTs合理使用、ArkUI组件使用、网络请求或其他耗时任务的处理。

2.1 网络请求

一般采用预加载和缓存,一般在核心页面的入口处进行接口预加载。接口拆分,减少首屏接口的响应时间。

2.2 ArkUI组件

  • 长列表缓存及复用
  • 合理使用状态管理
  • 尽量给定组件宽高固定值
  • 使用合适的组件
  • 避免冗余组件嵌套

四、检测分析工具

2

1、性能检测工具

  • Code Linter:代码静态检测工具
  • App Analyzer:应用体检工具

2、性能分析工具

  • DevEco Profiler:场景化调优工具。支持冷启动、卡顿丢帧、ArKUI状态变量、网络、CPU、内存等详细分析能力。
  • ArkUI Inspector:UI布局分析工具。UI树可视化分析,识别组件布局和层次问题,优化节点布局。

叨叨叨:

  • 华为对性能检测还是比较严格的,有时候人眼感知不到少量的丢帧问题,还是会提相关性能问题。在使用Profiler中有时候还是定位不到具体组件或者函数,不确定是不是自己的打开方式不对。
  • ArkUI Inspector感觉用起来比安卓的更直观,而开发过程中安卓习惯了xml的边开发边预览,鸿蒙UI预览会相对繁琐。
  • CodeLinter也确实能提前暴露一些问题,但是还是会有误判,需要人为评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值