为什么bazel比gradle更快

时间:2017-05-19 08:50:31

标签: bazel

最初,我使用gradle来构建我的Android项目,但最近,我将其迁移到bazel,我发现bazel真的比gradle快,所以我想知道为什么,但是bazel的文件并没有对此有太多了解,任何人都可以帮助我吗?

非常感谢!

1 个答案:

答案 0 :(得分:12)

完全披露:我在Bazel工作。

由于两个原因,这不是一个容易回答的问题。首先,性能高度依赖于场景。例如,我们通常期望干净的构建比只有单个文件已更改的构建要慢。其次,我不知道Gradle如何在内部工作,他们最近做了很多工作来改善Gradle的表现。

但是我可以谈谈Bazel以及我们正在做些什么来加快速度。我们一直致力于构建性能约10年,早在我们公开之前就开始了。

关键特性是我们要求声明所有依赖项,并明确跟踪它们。如果在C ++中使用头文件或依赖于Java库,则必须在BUILD文件中声明此依赖项(并且我们强制通过沙箱化单个操作来声明这些依赖项)。这有三个影响:

首先,我们可以大量并行化构建,因为我们知道哪些事情取决于其他事情。

其次,我们可以非常快速地进行增量构建,因为我们可以在更改特定文件(BUILD文件,头文件,源文件......)时告诉必须重新构建构建的哪些部分。 / p>

第三,我们几乎从不需要做干净的构建。其他构建工具通常需要“干净”。进入一个可预测的状态 - 由于Bazel知道所有的依赖关系,它可以在每个构建上达到可预测的状态。

另一个影响是我们可以远程缓存(即跨用户),甚至可以在另一台机器上执行,尽管在撰写本文时这些都没有完全支持。