Bazel 加载性能
为了提高(增量)加载性能,我想将生成的巨大Bazel 加载性能,bazel,starlark,Bazel,Starlark,为了提高(增量)加载性能,我想将生成的巨大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") ... 然后通过以下方式触发BUIL
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
中计算符号内部的所有规则要快吗
foo = [
foorule("a"),
foorule("b"),
]
或者有更好的方法并行加载所有信息吗?如果我没有弄错的话,这应该会稍微快一点,但最好的方法是将规则分成几个包,这样包加载本身就可以并行化
这里只有云雀加载是并行的。每个
.bzl
is文件可以并行加载和评估。评估.bzl
文件包括评估所有顶级语句。如果您有CPU密集型计算,您可以在顶层进行,并将结果存储在全局值中
然而,如果.bzl文件只是定义一些函数,那么几乎没有什么可以并行化的(只需从磁盘加载文件并对其进行解析)。我认为你的情况不会有明显的加速。宏不会并行计算
你有更多的数据吗?您的文件中有多少规则(运行bazel查询:all | wc-l
)?加载文件需要多长时间?您确定瓶颈是加载阶段吗
如果您的构建文件很大,我建议您拆分它。如果可能的话,创建多个构建文件。您将获得更多的并行性