星球的眼睛 发表于 2024-10-14 11:19:31

harmonyOS 原来构建还有这么多弯弯绕绕

        随着用户需求的不停增长,我们的 APP 已发展成功能丰富的超等APP,这也导致打包构建变得非常耗时,大概必要数小时,严重影响开发效率和产物迭代。通过采用模块化计划、增量构建、并行处置惩罚、缓存机制、优化依赖管理,以及云构建服务等计谋,不但能大幅收缩构建时间,还能提升团体开发效率,更加高效的交付业务。
1. Hvigor 高性能构建

        Hvigor作为编译构建任务流工具,它支持并行编译、增量编译等特性, 增量构建是一种通过使用缓存只构建发生变化的部门的方法,可以加快构建速率并减少资源消耗和不须要的重复编译工作,实现对代码变动的快速相应,提升构建效率。

https://img-blog.csdnimg.cn/img_convert/8c1ebd3fcf6fc10ad8ecbb2fffbb18a2.png
启用增量构建: 增量构建是hvigor执行任务的一种优化,只对发生变化的部门进行编译,而不是整个项目。如果在两次执行任务工程中,执行任务的输入和输出没有更改,hvigor会跳过该任务的执行。
https://img-blog.csdnimg.cn/img_convert/f4712245ab55505038864810da853647.png

   # 启用增量构建 hvigorw <task> --incremental
# 关闭增量构建 hvigorw <task> --no-incremental
◦并行编译:大部门工程都包含了多个子工程,其中一些子工程是相互独立的,也就是说,它们之间没有状态共享。在大多数环境下,通过并行构建可以有效地减少多个子工程的团体构建时间。默认环境下,hvigor会开启并行执行
<blockquote id="w-e-element-186"># 启用并行执行 hvigorw <task> --parallel
# 关闭并行执行 hvigorw <task> --no-parallel◦启动保卫历程:将历程常驻在内存中,一方面避免了Node历程重复启动、减少了加载js文件的耗时,另一方面可以复用构建过程中的增量缓存、减少增量缓存信息的读取与落盘操作。重复构建同一项目时,保卫历程可以将构建时间收缩。多次构建时,保卫历程只会将hvigor一次性加载到内存中,而不是每一次构建。
<blockquote id="w-e-element-192"># 启用保卫历程 hvigorw <task> --daemon
# 关闭保卫历程 hvigorw <task> --no-daemon根据业务场景,合理设置增量/并行编译、开启保卫历程,可以降低约 60% 的构建耗时
<blockquote id="w-e-element-156">
https://img-blog.csdnimg.cn/img_convert/a831d8ebdf5074c8ee0885b85f8c0e4f.png2. 模块化编译构建

为了提升HarmonyOS应用的开发效率和开发者体验,DevEco Studio引入了模块化编译方式,以优化传统的JSBundle化编译方案。以往的方案会为每个入口页面打包成一个独立的bundle包,不支持运行时共享,因此每当修改单个模块文件时,必要进行整包重新编译。这不但增长了编译时间,也导致HAP包体积增大,影响开发效率。

https://img-blog.csdnimg.cn/img_convert/7509f3f625c6b48de212091975251534.png
模块化编译通过以下方式办理这些问题:
◦独立编译:模块之间相互独立编译,避免了不须要的整包重编译,从而明显加快了编译速率。
◦动态共享包(HSP):支持将多个模块的通用能力和资源提取为动态共享包,供其他模块或应用使用,减少了包体积。
◦原生ES Module规则:采用原生ES Module规则构建源码,办理了Bundle编译打包模式带来的问题,使资源文件可以以独立模块形式进行编译。
https://img-blog.csdnimg.cn/img_convert/51183286ca8f43ca002b67a596904d26.png
        通过这些优化,开发者在修改单个模块代码时,无需整包编译,减少了编译的代码量,加快了增量编译速率,从而提升了团体开发效率和体验。必要留意的是,模块化计划的复杂性大概增长管理成本,因此开发者必要平衡好模块化的粒度。
3. 降低应用包体积

◦设置so压缩选项减小应用包巨细,在DevEco Studio中修改应用模块设置文件(如 module.json5 )中的 compressNativeLibs 字段,将其值设置为true。如许在打包应用时,so库文件将以压缩形式被打包到包中,从而减小应用包的巨细
◦通过修改应用模块设置文件module.json5 中的compressNativeLibs字段为true来压缩原生库,从而进一步减少应用体积
◦使用压缩工具减小图片和音频文件的巨细,并使用SVG等矢量格式代替位图图标。此外,删除项目中未被引用的资源文件也是优化资源文件的有效方法
◦共享代码和资源:通过HSP(Harmony Shared Package)共享代码和资源,避免重复,进一步优化应用的资源管理
◦启用肴杂, HarmonyOS NEXT支持多种代码肴杂工具,重要通过Gradle构建工具进行设置。在工程应用目录的gradle文件中设置minifyEnabled为true即可开启肴杂。此外,HarmonyOS NEXT还支持ArkTS、TS和JS文件的肴杂。在模块级的 build.gradle 文件中的 buildTypes 部门添加以下代码,确保在发布版本中启用肴杂详细设置方法如下:
   buildTypes {
       release {
         minifyEnabled true
         proguardFiles getDefaultProguardFile('proguard-android-optimize.txt '), 'proguard-rules.pro'
       }
   } 4. 优化库管理加快构建

为了进一步优化长时间的构建我们还可以通过采用动态共享包(HSP)和静态共享包(HAR)的计谋提升构建效率。动态共享包(HSP) 通过按需加载减少了不须要的编译时间,而静态共享包(HAR)在模块间实现了高效的资源共享。这些方法在实际项目中表现也足够出色,可以或许有效优化构建流程。
◦选择合适的共享包类型
▪当必要在应用内部进行代码和资源共享时,发起使用HSP。它可以包含代码、C++库、资源和设置文件,但不支持独立发布,需随宿主应用一起发布。HSP通过按需加载,减少不须要的编译时间,提高构建效率。
▪当共享包作为应用模块的依赖项被引用时,应选择HAR。它同样可以包含代码、C++库、资源和设置文件,适合用于通用组件的共享。HAR通过高效资源共享,优化了模块间的依赖管理,进一步收缩构建周期。
◦多任务窗口与依赖管理
▪在多任务窗口场景中,HSP通过与宿主应用同历程运行,实现了更高效的资源管理和调用。这种方式不但减少了资源加载的耽误,还优化了内存使用,使应用在多任务环境下更流畅地运行。此外,按需加载的特性进一步提升了应用启动速率。
▪HAR在跨多个应用或模块的资源共享中表现出色。其模块化计划答应独立发布和管理,确保资源在差别应用间的高效共享。这种方法减少了重复资源的存在,降低了团体包体积,并简化了依赖管理,适合频仍更新和维护的复杂项目。通过优化资源的重用和依赖关系,提高构建效率。
◦懒加载技术的应用
▪懒加载技术(如LazyForEach),是一种按需加载数据或资源的计谋。通过按需加载数据或资源,懒加载避免了在构建初期加载所有内容,从而减少了构建时间和资源消耗。这种方法有效降低了编译时的负担,使得构建过程更加高效。此外,懒加载减少了不须要的库加载,优化了依赖管理,进一步收缩了构建周期。
5. 性能可视化检验结果

使用Build Analyzer工具会在每次构建应用时默认天生一份陈诉,可以记录任务执行耗时、线程、ArkTS编译中的各环节的细分耗时环境等信息,开发者可以通过这些数据分析排查构建过程中的性能问题。
◦通过命令行天生构建分析
<blockquote id="w-e-element-277">hvigorw assembleHap --analyze=normal --config properties.hvigor.analyzeHtml=true◦通过hvigor-config.json5设置中properties.hvigor.analyzeHtml字段天生构建可视化html文件
<blockquote id="w-e-element-285">"properties": { "hvigor.analyzeHtml": true // 天生构建可视化html文件 }构建任务时间图谱,构建任务展示按照各个任务总时长占比,以相对长度进行展示。可以对时间块进行缩小放大,检察详细的任务名称及耗时信息。
https://img-blog.csdnimg.cn/img_convert/7f190834bd9a1d6ef0c9fb1cf8ed9615.png
6. 不止于此

通过一系列优化计谋,我们明显提升了超等APP的构建效率。首先,通过模块化计划,将应用拆分为多个独立模块,减少了构建时的耦合,并提高了并行处置惩罚能力。其次,使用Hvigor的增量和并行编译特性,仅对代码变动部门进行编译,大幅收缩了构建时间。缓存机制的合理设置减少了重复数据加载,优化了资源访问速率。同时,压缩和肴杂代码、优化图片和音频文件、删除未使用资源等措施有效减小了应用包体积。共享代码与懒加载技术进一步优化了资源管理。借助Build Analyzer工具,我们可以或许实时监控和分析构建过程,快速识别息争决性能瓶颈。除此之外,通过自界说插件和构建任务,我们机动调整了构建流程,进一步提升了效率。这些措施不但收缩了构建时间,还提高了开发效率和产物迭代速率,使开发团队可以或许更快速地相应市场需求和用户反馈,确保应用的高效交付和稳定性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: harmonyOS 原来构建还有这么多弯弯绕绕