Reborn's Blog

鸿蒙动态import和延迟加载

2024-09-01·HarmonyOS, Dynamic Import, Performance

动态导入

动态导入支持导入HAR模块和HSP模块。

动态导入HAR模块文件路径

// HAR's Index.ets
export function add(a: number, b: number): number {
  let c = a + b;
  console.log('DynamicImport I am a HAR, %d + %d = %d', a, b, c);
  return c;
}

// HAP's src/main/ets/pages/Index.ets
import('myHar/Index').then((ns: ESObject) => {
  console.log(ns.add(3, 5));
});

// HAP's oh-package.json5
"dependencies": {
  "myHar": "file:../myHar"
}

动态导入使用之后,需要在 build-profile.json5 文件中配置动态运行时设置的三方 Har 和使用动态导入的 ets 文件,否则可能无法编译成对应的字节码。

"buildOption": {
  "arkOptions": {
    "runtimeOnly": {
      "packages": ["myHar"],
      "sources": ["./src/main/ets/utils/Calc.ets"]
    }
  }
}

延迟导入

延迟导入类似于动态导入,待加载文件在冷启动阶段不被加载,直至应用程序实际运行过程中需要用到时,才按需同步加载,缩短冷启动耗时。

使用上比动态导入简洁,直接使用 lazy 关键字实现即可,但支持范围有限。

#HarmonyOS#Dynamic Import#Performance