加载性能

时间:2017-07-11 10:37:37

标签: bazel

对于(增量)加载性能,我想将一个巨大的(相信我),生成的footer: new sap.ui.core.Icon({ src: "sap-icon://notification", visible: "{= ${Late} === 'Yes'}" }); 拆分成较小的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") ... 中的规则:

BUILD.bazel

这应该比评估foo_0() foo_1() 中的符号内的所有规则更快吗?

.bzl

或者是否有更好的方法同时加载所有信息?

2 个答案:

答案 0 :(得分:1)

如果我没有弄错,这应该稍快一些,但最好的方法是将规则拆分成几个包,这样包加载本身就可以并行化了。

这里只是Skylark加载并行化。

答案 1 :(得分:1)

每个.bzl文件都可以并行加载和评估。评估.bzl文件包括评估所有顶级语句。如果你有CPU密集型计算,你可以在顶层进行计算,并将结果存储在全局值中。

但是,如果.bzl文件只是定义了一些函数,那么几乎没有什么可以并行化(只需从磁盘加载文件并解析它)。我希望你的案件没有明显的加速。宏不会被并行评估。

你有更多数据吗?您的文件中有多少条规则(运行bazel query :all | wc -l)?加载文件需要多长时间?你确定瓶颈是加载阶段吗?

如果您的BUILD文件太大,我建议您将其拆分。如果可能的话,改为创建多个BUILD文件。你会得到更多的并行性。