对于(增量)加载性能,我想将一个巨大的(相信我),生成的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
或者是否有更好的方法同时加载所有信息?
答案 0 :(得分:1)
如果我没有弄错,这应该稍快一些,但最好的方法是将规则拆分成几个包,这样包加载本身就可以并行化了。
这里只是Skylark加载并行化。
答案 1 :(得分:1)
每个.bzl
文件都可以并行加载和评估。评估.bzl
文件包括评估所有顶级语句。如果你有CPU密集型计算,你可以在顶层进行计算,并将结果存储在全局值中。
但是,如果.bzl文件只是定义了一些函数,那么几乎没有什么可以并行化(只需从磁盘加载文件并解析它)。我希望你的案件没有明显的加速。宏不会被并行评估。
你有更多数据吗?您的文件中有多少条规则(运行bazel query :all | wc -l
)?加载文件需要多长时间?你确定瓶颈是加载阶段吗?
如果您的BUILD文件太大,我建议您将其拆分。如果可能的话,改为创建多个BUILD文件。你会得到更多的并行性。