优化迭代速度
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
<ph type="x-smartling-placeholder">
</ph>
报告问题open_in_new
查看来源open_in_new
敬上
每晚
·
7.3。
·
7.2 条
·
7.1。
·
7.0。
·
6.5
本页介绍如何在运行 Bazel 时优化 Bazel 的构建性能
。
Bazel 的运行时状态
Bazel 调用涉及多个交互部分。
bazel
命令行界面 (CLI) 是面向用户的前端工具
并接收来自用户的命令
CLI 工具会启动一个 Bazel 服务器
每个不同的输出基准。
Bazel 服务器通常持续存在,但在一些空闲后会关闭
这样才不会浪费资源
Bazel 服务器会针对给定命令执行加载和分析步骤
(build
、run
、cquery
等)中,该函数在其中构造必要的部分,
内存中构建图的位置生成的数据结构会保留在
作为分析缓存的一部分的 Bazel 服务器。
Bazel 服务器也可以执行操作
远程执行(如果已设置为远程执行)。通过
操作执行也会被缓存,即存储在操作缓存中(或者
执行缓存,该缓存可以是本地的,也可以是远程的,并且可以共享
运行 Bazel 服务器之间。
输出树中会提供 Bazel 调用的结果。
以迭代方式运行 Bazel
在典型的开发者工作流中,构建(或运行)一段代码是很常见的做法
通常以非常高的频率反复进行(例如,为了解决某些编译
或调查失败的测试)。在这种情况下,务必要注意
相对于bazel
底层的重复操作(例如调用编译器或执行测试)。
有鉴于此,我们再来看一下 Bazel 的运行时状态:
分析缓存是一段关键数据。花费大量时间
只需用于冷运行(即
在 Bazel 服务器启动或分析缓存被舍弃时)。
对于单次成功的冷 build(例如,对于正式版),此成本为
可承受,但对于反复构建相同的目标,
费用会摊销,并且不会在每次调用时重复。
分析缓存非常不稳定。首先,它是事件处理流程的一部分,
Bazel 服务器的状态,因此丢失服务器将失去缓存。但缓存
也很容易失效:例如,许多 bazel
命令行标志
会导致缓存被舍弃这是因为许多标志都会影响构建
(例如,由于
可配置的属性)。部分标志
也会导致 Bazel 服务器重启(例如,更改
启动选项)。
良好的执行缓存对于构建性能也很重要。执行
缓存可以保存在本地
磁盘上,或
远程。缓存可以共享给
而开发者的确如此
避免舍弃分析缓存
如果分析缓存被舍弃或
已重启服务器。在迭代使用期间,应避免以下任一情况:
请注意在迭代过程中更改 bazel
标志
工作流。例如,混用 bazel build -c opt
和 bazel cquery
会使每个命令舍弃另一个命令的分析缓存。一般来说,
可以尝试在特定工作流的持续时间内使用一组固定的标志。
一旦丢失 Bazel 服务器,分析缓存便会丢失。Bazel 服务器有一个
可配置空闲
之后便会关闭您可以通过
bazelrc 文件。服务器在启动时也会重启
标志会发生变化,因此请再次避免更改这些标志(如果可能)。
请注意,如果您按
在 Bazel 运行时反复使用 Ctrl-C。很想节省时间
中断不再需要的正在运行的构建,但只需按
按一次 Ctrl-C 可请求正常结束当前调用。
如果您想使用同一工作区中的多组标志,可以
使用多个不同的输出碱基,可通过 --output_base
进行切换
标志。每个输出库都有自己的 Bazel 服务器。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-13。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-08-13\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-08-13。"],[],[]]