Facebook正在改進其開源性能構建工具Buck,以加快開發速度并最大限度縮短在Android應用程序中測試代碼更改所需的時間。
Buck旨在加速、增加構建的可重復性,提供正確的增量構建并幫助開發人員理解依賴關系。該公司在2013年首次開放開源解決方案。
我們一直在穩步提高Buck的表現,加上越來越多的其他組織已經接受Buck,并作出了貢獻。但是,這些改進本質上是漸進的,基于對軟件開發方式的長期假設,Facebook的軟件工程師Jonathan Keljo在一篇文章中寫道,Facebook對這些核心假設提出質疑,這導致我們深入了解Java語言和Java編譯器內部的細微差別。
據Keljo表示,該團隊已經完全重新設計了Buck編譯Java代碼的方式,以便為Android工程師提供新的性能改進。
該解決方案還引入了規則流水線,Keljo說這是設計用于縮短瓶頸,并增加并行性以減少10%的構建時間。
Buck通常能夠并行建立多個規則。但是,瓶頸確實存在。如果一個常用的規則需要一段時間來建立,它的其他依賴關系必須等待,即使很小的規則可能會導致核心數量足夠高的系統出現瓶頸。
規則流水線現在允許依賴規則編譯,而編譯器仍然完成依賴關系。此功能現在可在開源中使用,但默認情況下未打開。
該公司還宣布僅源代碼存根生成平坦化依賴關系圖,并減少30%的構建時間。扁平圖生成速度更快,這是因為增加了并行性,因為需要檢查變化的路徑更短。