当前位置:   article > 正文

鸿蒙HarmonyOS:应用程序开发与使用-延迟加载(lazy import)

鸿蒙HarmonyOS:应用程序开发与使用-延迟加载(lazy import)

随着应用程序功能的不断扩展,冷启动所需的时间显著增长,主要是由于在启动初期加载了大量模块,其中存在大量未被实际执行的冗余文件。这种情形不仅拖延了应用的初始化过程,还造成了资源的无效占用。亟需采取措施精简加载流程,剔除非必需的文件执行,以优化冷启动性能,确保用户体验的流畅性。

说明

延迟加载特性在API12版本开始支持。

开发者如需在API12上使用lazy import语法,需在工程中配置"compatibleSdkVersionStage": "beta3",否则将无法通过编译。参考Deveco Studio build-profile.json5配置文件说明

功能特性

延迟加载特性可使待加载文件在冷启动阶段不被加载,直至应用程序实际运行过程中需要用到这些组件时,才按需同步加载相关文件,从而缩短应用冷启动耗时。

使用方式

开发者可以利用诸如Trace工具或日志记录等手段,来识别冷启动期间未被实际调用的文件。通过对这些数据的分析,开发者能够精准地定位出启动阶段不必预先加载的文件列表。针对这些文件的调用点,可以直接增加lazy标识。但需要注意的是,后续执行的加载是同步加载,有可能会阻塞任务执行(如点击任务,触发了延迟加载,那么运行时会去执行冷启动未加载的文件,从而增加耗时),因此是否使用lazy需要开发者自行评估。

说明

不推荐开发者盲目增加lazy,同样会增大编译及运行时的识别开销。

场景行为解析

  • 使用lazy-import延迟加载。

    1. // main.ets
    2. import lazy { a } from "./mod1"; // "mod1" 未执行
    3. import { c } from "./mod2"; // "mod2" 执行
    4. // ...
    5. console.log("main executed");
    6. while (false) {
    7. let xx = a;
    8. }
    9. // mod1.ets
    10. export let a = "mod1 executed"
    11. console.log(a);
    12. // mod2.ets
    13. export let c = "mod2 executed"
    14. console.log(c);

    执行结果为:

        main executed
  • 同时对同一模块引用lazy-import与原生import。

    1. // main.ets
    2. import lazy { a } from "./mod1"; // "mod1" 未执行
    3. import { c } from "./mod2"; // "mod2" 执行
    4. import { b } from "./mod1"; // "mod1" 执行
    5. // ...
    6. console.log("main executed");
    7. while (false) {
    8. let xx = a;
    9. }
    10. // mod1.ets
    11. export let a = "mod1 a executed"
    12. console.log(a);
    13. export let b = "mod1 b executed"
    14. console.log(b);
    15. // mod2.ets
    16. export let c = "mod2 c executed"
    17. console.log(c);

    执行结果为:

    1. mod2 c executed
    2. mod1 a executed
    3. mod1 b executed
    4. main executed

    如果在mian.ets内删除lazy关键字,执行顺序为:

    1. mod1 a executed
    2. mod1 b executed
    3. mod2 c executed
    4. main executed

语法规格

lazy-import支持如下指令实现:

语法ModuleRequestImportNameLocalNameAPI12是否支持lazy加载
import lazy { x } from "mod";"mod""x""x"支持
import lazy { x as v } from "mod";"mod""x""v"支持

错误示例

以下写法将引起编译报错。

  1. export lazy var v; // 编译器提示报错:应用编译报错
  2. export lazy default function f(){}; // 编译器提示报错:应用编译报错
  3. export lazy default function(){}; // 编译器提示报错:应用编译报错
  4. export lazy default 42; // 编译器提示报错:应用编译报错
  5. export lazy { x }; // 编译器提示报错:应用编译报错
  6. export lazy { x as v }; // 编译器提示报错:应用编译报错
  7. export lazy { x } from "mod"; // 编译器提示报错:应用编译报错
  8. export lazy { x as v } from "mod"; // 编译器提示报错:应用编译报错
  9. export lazy * from "mod"; // 编译器提示报错:应用编译报错
  10. import lazy v from "mod"; // 编译器提示报错:应用编译报错
  11. import lazy * as ns from "mod"; // 编译器提示报错:应用编译报错

与type关键词同时使用将会导致报错。

  1. import lazy type { obj } from "./mod"; // 不支持,编译器、应用编译报错
  2. import type lazy { obj } from "./mod"; // 不支持,编译器、应用编译报错

不推荐用法

  • 在同一ets文件中,期待延迟加载的依赖模块标记不完全。

    标记不完全将导致延迟加载失效,并且增加识别lazy-import的开销。

    1. // main.ets
    2. import lazy { a } from "./mod1"; //"mod1"内获取a对象,标记为延迟加载
    3. import { c } from "./mod2";
    4. import { b } from "./mod1"; // 再次获取"mod1"内属性,未标记lazy,"mod1"默认执行
    5. // ...
  • 延迟加载共享模块或依赖路径内包含共享模块。

    延迟加载对于共享模块依旧生效,使用限制参考共享模块开发指导

  • 暂不支持lazy-import延迟加载kit。

  • 延迟加载存在的影响。

    • 不依赖该模块的执行的side-effect。

    • 使用导出对象时,触发延迟加载的耗时导致对应特性的功能劣化。

    • 使用lazy特性导致模块未执行而导致的bug。

      开发者需自行评估延迟加载存在的影响。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击→【纯血版鸿蒙全套最新学习资料】希望这一份鸿蒙学习资料能够给大家带来帮助!~


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

 获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

2.视频学习资料+学习PDF文档

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS Next 最新全套视频教程

​​

 《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

​​

《鸿蒙开发基础》

​​

《鸿蒙开发进阶》

《鸿蒙进阶实战》

​​

大厂面试必问面试题

​​

鸿蒙南向开发技术

​​

鸿蒙APP开发必备

​​
点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。 

                   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/986682
推荐阅读
相关标签
  

闽ICP备14008679号