最初,我使用gradle
来构建我的Android项目,但最近,我将其迁移到bazel
,我发现bazel
真的比gradle
快,所以我想知道为什么,但是bazel
的文件并没有对此有太多了解,任何人都可以帮助我吗?
非常感谢!
答案 0 :(得分:12)
完全披露:我在Bazel工作。
由于两个原因,这不是一个容易回答的问题。首先,性能高度依赖于场景。例如,我们通常期望干净的构建比只有单个文件已更改的构建要慢。其次,我不知道Gradle如何在内部工作,他们最近做了很多工作来改善Gradle的表现。
但是我可以谈谈Bazel以及我们正在做些什么来加快速度。我们一直致力于构建性能约10年,早在我们公开之前就开始了。
关键特性是我们要求声明所有依赖项,并明确跟踪它们。如果在C ++中使用头文件或依赖于Java库,则必须在BUILD文件中声明此依赖项(并且我们强制通过沙箱化单个操作来声明这些依赖项)。这有三个影响:
首先,我们可以大量并行化构建,因为我们知道哪些事情取决于其他事情。
其次,我们可以非常快速地进行增量构建,因为我们可以在更改特定文件(BUILD文件,头文件,源文件......)时告诉必须重新构建构建的哪些部分。 / p>
第三,我们几乎从不需要做干净的构建。其他构建工具通常需要“干净”。进入一个可预测的状态 - 由于Bazel知道所有的依赖关系,它可以在每个构建上达到可预测的状态。
另一个影响是我们可以远程缓存(即跨用户),甚至可以在另一台机器上执行,尽管在撰写本文时这些都没有完全支持。