智能客服
你问我答,随时在线为你解决问题
问题现象:
首次打开元服务或长时间未使用后重新打开元服务时,从点击图标到元服务主页面完全加载出来的时间过长,期间可能显示空白屏幕或加载动画。
背景知识:
ASCF(Atomic Service Cross-Platform Framework)是元服务的跨平台运行框架,基于JSVM引擎和元服务技术栈实现。ASCF元服务的冷启动流程涉及AbilityStage生命周期、JSVM引擎初始化、元服务app.js加载执行、首页创建与渲染等ASCF框架特有的环节。
| 阶段 | 说明 |
|---|---|
| 运行环境准备 | 元服务的运行环境包括元服务进程、HarmonyOS系统组件和UI元素(如 导航栏、tabBar等)、渲染页面使用的WebView容器、开发者JavaScript代码的运行环境等。 |
| 逻辑层代码注入 | 元服务启动时需要从代码包中读取元服务的配置和代码,并注入到JavaScript引擎中。在主包代码注入过程中,会触发元服务的App.onLaunch和App.onShow生命周期。 |
| 视图层代码注入 | WebView容器准备好后会根据用户访问的页面,加载页面渲染需要的页面结构和样式信息。逻辑层代码注入和视图层代码注入是并行进行的。 |
| 页面渲染 | 逻辑层代码注入完成后,ASCF框架会根据用户访问的页面,进行页面组件树初始化,生成首屏渲染初始数据发送到视图层;结合首屏渲染初始数据和视图层的页面结构和样式信息,元服务进行首页渲染,展示元服务首屏。在这个过程中会触发页面的Page.onShow、Page.onLoad、Page.onReady生命周期。 |
ASCF框架在冷启动关键环节埋设了Trace打点,开发者可使用DevEco Profiler的Launch分析能力抓取冷启动过程的耗时数据,通过搜索Trace关键字定位耗时瓶颈。
ASCF冷启动Trace打点说明:
借助DevEco Profiler抓取ASCF元服务冷启动过程的Trace数据,根据下表中ASCF框架提供的Trace关键字,定位各阶段耗时情况。
下表列出ASCF框架在冷启动流程中埋设的所有Trace打点,按执行顺序排列:
| Trace关键字 | 所属阶段 | 说明 |
|---|---|---|
| H:StageCreate | 运行环境准备 | 元服务AscfAbilityStage启动整体耗时,包含解析配置、初始化JSVM引擎等。 |
| H:UIAbilityCreate | 运行环境准备 | 元服务AscfUIAbility启动整体耗时,包含窗口信息初始化、启动参数加载等。 |
| H:MainPageAppear | 运行环境准备 | AscfMainPage创建整体耗时,包含UI上下文初始化、API注册、系统组件创建等。 |
| H:LaunchMiniApp | 逻辑层代码注入 | 元服务app.js加载和执行的整体耗时,从启动加载到加载完成。 |
| H:AscfRenderPageAppear | 视图层代码注入 | AscfRenderPage耗时,包含子包加载、页面配置信息读取等。 |
| H:NewPageRender | 视图层代码注入 | 路由到新页面渲染耗时,包含页面生成、NavDestination渲染等。 |
| H:WebPageLoad | 页面渲染 | 从视图层代码注入到首页渲染的整体耗时。 |
| H:JSVM_Exe_Code | 运行时 | 逻辑层JS代码执行耗时,包含所有业务逻辑执行、API调用回调、页面生命周期回调等。 |
问题定位:
分析结论:
ASCF元服务冷启动慢的常见原因有:
修改建议: