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