You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bazel构建比Make慢?SKYFUNCTION耗时占47%是否合理?

Bazel构建中SKYFUNCTION耗时占比47%是否合理?

首先直接给结论:这种情况不太合理,尤其是你的项目规模不大,而且对比之前make-js的40秒构建耗时,切换到Bazel后涨到70秒,SKYFUNCTION的高占比大概率是拖慢构建的核心瓶颈。

先看你提供的性能分析数据:

Type Total Count Average
 ACTION 0.03% 77 0.70 ms
 ACTION_CHECK 0.00% 4 0.90 ms
 ACTION_EXECUTE 40.40% 77 912 ms
 ACTION_UPDATE 0.00% 74 0.02 ms
 ACTION_COMPLETE 0.19% 77 4.28 ms
 INFO 0.00% 1 0.05 ms
 VFS_STAT 1.07% 117519 0.02 ms
 VFS_DIR 0.27% 4613 0.10 ms
 VFS_MD5 0.22% 151 2.56 ms
 VFS_DELETE 4.43% 53830 0.14 ms
 VFS_OPEN 0.01% 232 0.11 ms
 VFS_READ 0.06% 3523 0.03 ms
 VFS_WRITE 0.00% 4 0.97 ms
 WAIT 0.05% 156 0.56 ms
 SKYFRAME_EVAL 6.23% 1 10.830 s
 SKYFUNCTION 47.01% 687 119 ms

为什么说这个占比不合理?

SKYFUNCTION是Bazel核心框架Skyframe的执行单元,负责处理依赖解析、缓存有效性校验、构建规则逻辑计算等工作。对于小规模项目来说,它的耗时占比通常应该远低于ACTION_EXECUTE(你的数据里是40.4%)——毕竟真正的构建执行(比如编译、打包)才应该是耗时主力。

可能的原因和排查方向

这里给你几个具体的排查点,帮你定位问题:

  • 缓存未有效命中:如果Bazel的本地/远程缓存没正常工作,每次构建都要重新计算所有依赖关系,会导致Skyframe反复执行SKYFUNCTION。你可以试试bazel clean --expunge后冷构建一次,再做一次热构建(修改一个无关文件后构建),如果热构建耗时还是很高,说明缓存大概率有问题。
  • 构建规则效率低下:如果你用的是rules_nodejs这类JS相关规则,旧版本或者自定义的规则可能存在冗余计算——比如重复扫描文件、不必要的依赖遍历,或者在Skyfunction里做了同步IO这类低效操作。可以尝试升级到最新稳定版的rules_nodejs和Bazel本身,看是否能缓解。
  • 依赖结构冗余:虽然项目规模不大,但如果依赖树嵌套过深、存在大量跨包依赖,Skyframe需要处理的节点会暴增,推高SKYFUNCTION耗时。你可以用bazel query --nohost_deps --noimplicit_deps 'deps(//your:main-target)'查看依赖结构,看看有没有可以精简的冗余依赖。
  • 自定义规则的问题:如果你们写了自定义Bazel规则,检查一下是否在Skyfunction中做了不必要的计算——比如重复读取文件内容、没有缓存计算结果等,这些都会大幅增加耗时。

下一步的具体操作

  1. 生成更详细的性能分析:执行bazel build --profile=build-profile.gz,然后用bazel analyze-profile build-profile.gz查看具体哪些SKYFUNCTION耗时最长,直接定位到对应的规则或目标。
  2. 测试基础规则性能:用最简化的rules_nodejs规则构建一个空的JS项目,对比SKYFUNCTION的占比,如果这个测试项目的占比正常,说明问题出在你项目的特定配置上。
  3. 检查缓存配置:确认~/.cache/bazel目录是否正常读写,有没有配置错误导致缓存失效的情况。

总的来说,小规模项目里SKYFUNCTION占47%耗时是异常的,通过上面的步骤应该能找到瓶颈,优化后大概率能把构建耗时降到甚至低于原来的make-js水平。

内容的提问来源于stack exchange,提问作者ddwolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:15:29