- 安装包大小: 50,214,681 bytes
未使用延迟组件:
- base-arm64_v8a.apk - 12,521,900 bytes
- base-master.apk - 80,605,796 bytes
- 安装包大小: 93,127,696 bytes
我们可以看到编译后的代码大小(base-arm64_v8a.apk) 减少了约 200kB,初始包体积(base-master.apk)减少了约 43MB。总体而言,初始安装尺寸减少了46%。dart代码、资源文件等会被移动到单独的组件中,只有在需要时才会在运行时下载。安装了所有组件后应用的体积只比非延迟安装的应用仅多几 KB。
延迟组件的应用结构
延期的 Dart 库通过 gen_snapshot
(Dart编译器)生成「加载单元」,当以 profile 或者 release 模式构建的时候,每个加载单元输出为一个拆分的 AOT 共享库(.so
文件)。加载单元是代码中用 deferred 关键字引入库的最小的集合,可以从基础库中分离出来。
下图展示了使用延迟组件的应用程序结构,和延迟 dart 库被编译成加载单元并打包成 .aab
文件的「生命周期」。
这个例子有以下特点:
- 四个 Dart 库,其中 Dart 库 lib1 依赖于 lib2。lib1、lib3 和 lib4 被作为延迟组件导入到 flutter 应用程序的主代码中。
- 四个加载单元,其中 id 为 1 的是基本单元