【第七期】应用冷启动时延问题部分类型举例
高耗时函数可能会造成应用卡顿,对于执行次数较多的函数,应尽量减少调用次数,单次执行但总耗时较高的函数,可以考虑通过异步方式进行优化。
在检测结果中,开发者可以通过点击报告表格中的对应方法名,快速跳转至对应代码片段,同时体检工具也会给出相应的优化建议,如将耗时函数放到子线程或进行缓存、使用多线程能力等。
高耗时非UI操作
高耗时函数可能会造成应用卡顿,对于执行次数较多的函数,应尽量减少调用次数,单次执行但总耗时较高的函数,可以考虑通过异步方式进行优化。
在检测结果中,开发者可以通过点击报告表格中的对应方法名,快速跳转至对应代码片段,同时体检工具也会给出相应的优化建议,如将耗时函数放到子线程或进行缓存、使用多线程能力等。

import加载耗时
体检工具可以检测出应用冷启动过程中累计加载的文件数量、未使用的文件数量和加载总耗时,开发者可参考以下优化思路和流程,对此类冷启动问题进行优化。
import加载耗时问题优化思路



import加载耗时问题优化流程

1. 查找耗时最高的未使用import文件。
在本地浏览器中打开下载的依赖关系文件 full_dependency.html,视图中左侧列表表示已加载、未使用的文件,并且按照耗时从高到低排序;右侧表示已使用文件,开发者需要关注未使用文件中耗时较多的几个文件导入,例如 DetailView 文件的导入。

2. 根据文件名检索文件调用关系链。
在搜索框中通过文件名DetailView进行检索,该文件的依赖关系则会在下方节点视图中展示,并且默认会展示其子节点的使用情况,未使用的文件会被标红显示。

3. 查看检索文件的上层和下层文件节点信息。
查找上层文件节点信息,即目标文件被导入的位置;查找下层文件节点信息,目标文件的耗时是否由其子节点导致,如果下层文件耗时较长,则需要考虑优化子节点的导入。

4. 判断上层文件是否为其他module的Index.ets文件导出。
如果上层文件不为其他module的统一对外暴露接口文件(例如Index.ets),则可以在上层文件中使用lazy import对该模块进行优化。

如果上层文件为其他module的统一对外暴露接口文件(例如Index.ets),则需要通过import路径展开性能优化。
例如CustomLayout1上层模块为library模块的Index.ets,其中有多个文件导出。

在Entry的首页通过依赖对应模块引入,会导致冷启动阶段将CustomLayout2和CustomLayout3等冷启动阶段无用的文件导入。

具体优化方案,则是通过在import时,对路径展开进而优化性能。

5. 在导出文件中标记已修改的文件。
在下载全量import文件清单表格中,标记已优化的未使用文件,便于优化备忘,特别是当需要优化的文件比较多的时候。

6. 重新进行冷启动场景化检测。
当优化完成后,重新进行冷启动场景化检测,查看优化收益是否达到预期,如未达到预期,则需要重新进行分析优化。
网络请求耗时
应用首页内容需要通过网络请求获取数据并显示时,网络请求耗时和网络请求发起的时机,对应用冷启动时长有影响。使用AppAnalyzer能够检测出应用中请求URL的请求耗时和点击离手到请求发起间隔。
• 网络请求本身耗时长

网络请求本身是否耗时可通过检测结果中的请求耗时长来进行判断,时间越长则网络请求本身耗时越久。详细分析请参考链接中“网络请求提前发送”。
网络请求本身耗时长,可对该URL请求进行预连接和预解析来优化网络传输速度,提前完成DNS查询和TCP/TLS握手,即在应用启动或空闲时提前建立并维护一个持久的连接池;还可以使用CDN来优化网络传输速度,即将静态资源部署到CDN上。
• 网络请求发起太晚

点击离手到请求发起间隔则表示用户进行点击操作后,到真正向服务器发起网络请求的那一刻止,这中间所经过的时间。可通过检测结果中的点击离手到请求发起间隔时长来进行判断,时间越长,则表示网络请求发起的越晚。可通过提前发起网络请求,来进行优化。可参考链接中“网络请求提前发送”章节。
如果开发者既无法优化网络请求本身耗时,也无法将网络请求提前发起,可以考虑提前将网络请求数据缓存,下次冷启动时候直接加载缓存数据,再通过发送网络请求刷新数据。
首页组件复杂度高导致组件创建耗时
首页组件复杂度较高会影响首页加载绘制耗时,AppAnalyzer工具能检测出页面中组件自身创建是否耗时过长。

在静态检测可能故障原因表格中,可点击源文件定位到创建耗时的 UI 组件,根据提供的可能故障原因,对 UI 组件进行相应优化修改,即可减少该 UI 组件自身创建耗时。
开发者可采用以下方式,控制UI的渲染范围,防止页面卡顿或掉帧:

异步线程阻塞主线程
当主线程长时间等待子线程或异步函数返回,会造成主线程长时间被阻塞,可能导致时延不达标的情况。体检工具会对主线程长时间被阻塞进行检测,可以根据检测结果中主线程空闲时间判断主线程是否长时间被阻塞,空闲时间越长则阻塞时间越久,详细请参考链接中“主线程长时间被阻塞 ”章节。
通过本文你已经了解了一些造成启动时延劣化的根因,下一章节我们将带你进行 Launch 工具实操,完成启动时延的简单分析。
—————————————————————————————————–
🔗 官网开发者学堂视频:https://developer.huawei.com/consumer/cn/training/result?type2List=201783644516849879&orderBy=1&courseType=5

🔗 社区DFX专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001


【扫码加入 HarmonyOS DFX 技术交流群】
本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务
- 目前还没评论,等你发挥!

起点课堂会员权益




