在 Docker 中静态编译 Rust 二进制,每次代码变动都要重编译,导致构建耗时长(最初约175秒)。
使用 cargo-chef 缓存依赖层后,依赖编译时间大幅缩短,但最终二进制编译仍需约170秒。
通过 rustc 自我剖析和 measureme 工具,发现主要瓶颈在链接时优化(LTO)和 LLVM 模块优化(LLVM_module_optimize)。
禁用 LTO 和调试符号可将最终二进制编译时间降至约50秒;将最终 crate 的优化级别设为 0 可进一步降至约15秒。
使用 -C llvm-args 调低 inliner 阈值(inline-threshold 等)可再提升编译速度约16%,降至约40秒。
将大型 async 函数拆分为更小函数,并对 Future 使用 Box<dyn Future> 抹除泛型,减少 monomorphization,显著减少单函数优化时间。
简化依赖库的泛型接口(或用非泛型版本),避免在主 crate 重复编译同一泛型函数,可进一步加速。
综合以上优化措施后,将 Docker 下的 release 构建时间从 175 秒缩短至约 32 秒。
Get notified when new stories are published for "🇨🇳 Hacker News 简体中文"