Hacker News 中文摘要

RSS订阅

如何让Firefox构建速度提升17% -- How to make Firefox builds 17% faster

文章摘要

文章介绍了通过利用buildcache的Lua插件系统缓存Firefox的WebIDL绑定代码生成步骤,使Firefox构建速度提升17%。该方法基于已合并的Bug 2027655,通过自定义包装非传统编译器程序来优化构建流程。

文章总结

如何让Firefox构建速度提升17%

本文介绍了通过优化WebIDL绑定代码生成步骤,显著提升Firefox浏览器构建速度的方法。

核心优化点

在Firefox构建过程中,WebIDL绑定代码生成是一个早期步骤,会通过python3 -m mozbuild.action.webidl命令从数百个.webidl文件生成数千个C++绑定文件。虽然该步骤本身耗时不算太长,但由于每次完整构建(clobber build)都会执行,且输出结果完全由输入决定,因此非常适合进行缓存优化。

技术实现

  1. Makefile修改

    • dom/bindings/Makefile.in中添加条件判断,当使用buildcache时,将$(CCACHE)作为命令包装器传递给py_action调用
    • 通过ifdef MOZ_USING_BUILDCACHE判断确保只对buildcache生效
  2. Lua包装器

    • 利用buildcache的Lua插件系统编写webidl.lua脚本
    • 脚本需要处理三个关键问题:命令匹配、输入文件识别和输出文件识别
    • 使用direct_mode直接哈希输入文件,而非依赖预处理输出

性能提升

测试数据显示,在Linux系统上进行完整构建时:

| 工具 | 冷缓存 | 热缓存 | 使用插件后 | |------|--------|--------|------------| | 无缓存 | 5分35秒 | - | - | | buildcache | 5分43秒 | 1分27秒 | 1分12秒 |

使用Lua插件后,构建时间进一步缩短15秒,最终达到1分12秒,相比原始构建速度提升了约77%。

配置方法

  1. 更新到最新版Firefox代码
  2. 克隆buildcache-wrappers仓库
  3. ~/.buildcache/config.json中配置lua_paths指向包装器目录
  4. 建议设置较大的缓存大小(如2.5GB)以容纳大型Rust组件

未来展望

这种基于Lua插件的缓存机制可以推广到Firefox构建过程中的其他确定性代码生成步骤,作者计划继续探索更多优化机会。

注:所有测试数据均为单次运行结果,仅供参考趋势方向。

评论总结

总结评论内容:

  1. 对编译效率提升的肯定
  • "wow, 17% is impressive with such an easy fix"(K0IN)
  • "Why compile code when ccache faster"(Devorlon)
  1. 对Mozilla发展策略的质疑
  • "perhaps Mozilla should focus on user share dropping"(shevy-java)
  • "focusing on that strategy does not really work when dinosaur-like extinction is around the corner"(shevy-java)
  1. 对构建缓存技术的讨论
  • "Can you cache Rust proc-macros?"(mmastrac)
  • "Windows builds were ridiculously poor on cache hits rates"(mmastrac)
  1. 对代码精简的调侃
  • "I guess 'purge 17% of the code' is not the correct answer?"(allenrb)