为什么bazel比gradle快

为什么bazel比gradle快,bazel,Bazel,最初,我使用gradle来构建我的android项目,但最近,我将其迁移到bazel,我发现bazel确实比gradle快,所以我想知道为什么,但是bazel的文档对此没有给出多少想法,有人能帮我吗 非常感谢 完全披露:我在Bazel工作 这不是一个容易回答的问题,原因有二。首先,性能高度依赖于场景。例如,我们通常期望一个干净的构建比一个只有一个文件更改的构建要慢。其次,我不知道Gradle内部是如何工作的,他们最近做了很多工作来提高Gradle的绩效 但我可以谈谈Bazel和我们正在做什么来加

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


非常感谢

完全披露:我在Bazel工作

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

但我可以谈谈Bazel和我们正在做什么来加快进度。我们已经在构建性能方面工作了约10年,早在我们公开之前就开始了

关键特性是我们需要声明所有依赖项,并显式跟踪它们。如果在C++中使用头文件,或者依赖于java库,则必须在构建文件中声明此依赖关系(并且我们强制通过沙箱个别动作声明这些依赖关系)。这有三个影响:

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

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

第三,我们几乎不必进行干净的构建。其他构建工具通常需要“清理”才能进入可预测状态——因为Bazel知道所有依赖项,所以它可以在每个构建上进入可预测状态


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

嘿,ldjhust,您的代码库是开源的吗?要回答为什么Bazel比Gradle快的问题,可能需要查看构建文件。我很想了解更多关于Bazel如何帮助加快构建的信息。对不起,伙计,这个项目不是我自己的,也不是开源的。非常感谢您的回复!