Nodejs打包构建时长优化
优化策略
底层软件硬件调整
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,否则可能出现依赖异常导致安装失败。
微信
支付宝