Nodejs打包构建时长优化

发布时间 2023-11-17 16:59:00作者: GaoYanbing

优化策略

底层软件硬件调整

CI过程中主要的压力还是集中在IO方向,增加CI节点提高整个CI池子的容量,把之前节点使用的硬盘更换为SSD可以增加IO吞吐量。同时把用于CI的node节点在K8S集群中隔离开来,让CI服务独享这些资源避免与其他资源发生抢占。

CI 工作台优化

优化CI工作台的代码,减少每次CI任务抓取git仓库里托管项目的代码量,提高整体的代码抓取的效率,减少网络IO和磁盘IO量。

强制启用内部软件源

要求各业务线的项目启用在内部搭建的软件源,尽量不要使用外部软件源,减少等待外部网络的下载时间。Nodejs使用verdaccio来搭建内部源并且设置国内的nodejs源作为上游,拉取到的包就会缓存到本地服务器,大大减少了不必要的网络开销。java和 php 分别使用了nexus和packagist。

验证

考虑到底层软件硬件的升级调整对IO性能提升很容易理解,就不在这里赘述,这里着重介绍一下引入yarn和把yarn.lock提交到代码仓库后带来的速度大幅提升。

安装 yarn

用yarn替换npm进行编译构建


yarn通过yarn.lock文件来分析和构建nodejs 的依赖环境,分析依赖生成yarn.lock需要花费大量的时间,如果仓库里面自带了满足依赖的yarn.lock文件,在CI的环节就会减少分析这一步。
以下矩阵可以反应出 yarn.lock 对于安装依赖包的速度影响

目前我们在流水线也默认启用了node_modules 复用机制,npm也同样会受益,但即便是有npm的node_modules 复用机制,大量测试后 isntall的速度yarn更有优势,可以考虑考虑使用yarn install来提速。

提交yarn.lock文件

前面也提到 yarn.lock对于nodejs CI提速有很重要的作用,同时也可以保障协同开发的工程中的依赖一致性。yarn.lock也应该提交到代码仓库中。同时,yarn的官方也强烈建议大家提交。如果git的.gitignore有限制,需要在放开yarn.lock允许提交。
本地代码测试的时候 运行yarn install生成yarn.lock文件

添加依赖包以及维护yarn.lock文件


注意这些操作都可以自动增量更新package.json和yarn.lock中的依赖关系。为了不破坏yarn.lock的正确性,此文件不要手动去修改。需要使用上游更新后的包,要使用yarn upgrade来引用最新的上游依赖。
如果git merge操作导致yarn.lock发生变化,应该在本地重新生成新的 yarn.lock文件后提交到git,否则可能出现依赖异常导致安装失败。