在鸿蒙应用开发中,构建效率直接影响开发体验。Hvigor提供了并行构建和增量构建两种优化机制,帮助缩短构建时间。
一、并行构建
大部分工程包含多个子工程,其中一些子工程相互独立(无状态共享)。通过并行构建可以有效减少多个子工程的整体构建时间。
注意:子工程之间存在大量依赖关系时,可能无法显著缩短构建时间,节省时间取决于工程结构和依赖关系。
Hvigor默认开启并行构建。
三种控制方式
| 控制方式 | 操作 |
|---|---|
| IDE设置 | File → Settings → Build, Execution, Deployment → Build Tools → Hvigor → 勾选/取消"Execute tasks in parallel mode" |
| 命令行 | 启用:hvigorw <task> --parallel关闭: hvigorw <task> --no-parallel |
| 配置文件 | hvigor-config.json5中配置execution.parallel选项 |
二、增量构建
增量构建是Hvigor执行任务的优化机制:如果在两次执行任务过程中,任务的输入和输出没有更改,Hvigor会跳过该任务的执行
Hvigor默认启用增量构建。
三种控制方式
| 控制方式 | 操作 |
|---|---|
| IDE设置 | File → Settings → Build, Execution, Deployment → Build Tools → Hvigor → 勾选/取消"Re-execute the task in incremental mode" |
| 命令行 | 启用:hvigorw <task> --incremental关闭: hvigorw <task> --no-incremental |
| 配置文件 | hvigor-config.json5中配置execution.incremental选项 |
增量构建标识
当控制台输出任务被标记为UP-TO-DATE时,说明增量构建正在工作,该任务被跳过。
全量构建 vs 增量构建
| 场景 | 构建类型 |
|---|---|
| 执行Build → Clean Project后重新build | 全量构建 |
| 未执行Clean Project,直接重新build | 增量构建 |
任务的输入和输出
增量构建的核心是记录和比较任务的输入和输出。
| 概念 | 说明 |
|---|---|
| 输入 | 影响任务执行结果的属性(源文件、参数等) |
| 输出 | 任务执行产生的产物(编译文件、打包文件等) |
规则说明:
| 规则 | 说明 |
|---|---|
| 至少定义一个输出 | 否则增量构建无法工作 |
| 影响输出的属性必须注册为输入 | 否则任务可能被错误跳过 |
| 不影响输出的属性不要注册为输入 | 否则任务可能被不必要执行 |
| 非确定性任务不应配置为增量任务 | 相同输入可能产生不同输出,最新检查无效 |
工作原理
第一次执行 ↓ 获取输入快照(文件名、路径、大小、修改时间、哈希值) ↓ 执行任务成功 ↓ 获取输出快照(文件名、路径、大小、修改时间、哈希值) ↓ 存储输入和输出快照信息 ↓ (任务快照也一并存储) 第二次执行前 ↓ 获取输入和输出的新快照信息 ↓ 比较新快照与之前存储的快照 ├── 相同 → 任务UP-TO-DATE,跳过执行 └── 不同 → 执行任务 → 存储新快照鸿蒙提升构建效率通过并行构建(默认开启,多子工程独立时有效)和增量构建(默认开启,输入输出无变化时任务标记为UP-TO-DATE跳过执行)两种机制实现,均支持IDE设置、命令行参数(--parallel/--incremental)和hvigor-config.json5配置,增量构建需任务至少定义一个输出,影响输出的属性必须注册为输入。