2017-07-11 41 views
1

對於(增量)加載性能我想分裂一個巨大的(相信我),生成BUILD.bazel到更小的.bzl文件。加載性能

在每個.bzl然後我計劃有一個宏foo,其中包含實際的規則要求:

def foo(): 
    foorule("a") 
    foorule("b") 
    ... 

BUILD.bazel然後我將有(很多)負載,如:

load("foo.bzl", foo_0 = "foo") 
load("other/foo.bzl", foo_1 = "foo") 
... 

foo_0() 
foo_1() 

,然後通過觸發規則

這是否應該比在.bzl中評估符號中的所有規則更快?

foo = [ 
    foorule("a"), 
    foorule("b"), 
] 

還是有更好的方式來並行加載所有信息?

回答

1

如果我沒有弄錯,這應該稍微快一點,但最好的辦法是將規則分成幾個包,這樣包加載本身就可以並行化。

這裏只是雲雀加載將被並行化。

1

每個.bzl是文件可以並行加載和評估。評估.bzl文件包括評估所有頂級語句。如果您有CPU密集型計算,則可以在頂層執行並將結果存儲在全局值中。

但是,如果.bzl文件只是定義了一些函數,幾乎沒有什麼可以並行化(只需從磁盤加載文件並解析它)。我希望你的情況沒有明顯的加速。宏不會被並行評估。

你有更多數據?您的文件中有多少規則(運行bazel query :all | wc -l)?加載文件需要多長時間?你確定瓶頸是裝載階段嗎?

如果您的BUILD文件很大,我會鼓勵您將其拆分。如果可能,改爲創建多個BUILD文件。你會得到更多的並行性。