为什么 bazel 比 gradle 快

why is bazel faster than gradle

最初,我使用gradle构建我的android项目,但最近,我将其迁移到bazel,我发现bazel确实比gradle,所以我想知道为什么,但是bazel的文档对此没有给出太多的想法,谁能帮助我?

非常感谢!

完全披露:我在 Bazel 上工作。

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

但我可以谈谈 Bazel 以及我们正在做些什么来让它变得更快。我们一直致力于构建性能约 10 年,早在我们实现它之前就开始了 public。

关键特征是我们要求声明所有依赖项,并且我们明确地跟踪它们。如果您在 C++ 中使用头文件,或依赖于 Java 库,则必须在您的 BUILD 文件中声明此依赖项(我们强制这些通过沙盒化单个操作声明)。由此产生三种效果:

首先,我们可以高度并行化构建,因为我们知道哪些事物依赖于哪些其他事物。

其次,我们可以非常快速地进行增量构建,因为当您更改特定文件(BUILD 文件、头文件、源文件...)时,我们可以知道构建的哪些部分必须重新完成.

第三,我们几乎不需要进行干净的构建。其他构建工具通常需要 'make clean' 才能进入可预测状态 - 因为 Bazel 了解所有依赖项,所以它可以在每次构建时进入可预测状态。

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