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,否則可能出現依賴異常導致安裝失敗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM