Never stop asking questions

保持好奇心与探索欲


  • Home
  • Archive
  • Categories
  • Tags
  • About Me
  •    

使用 sccahe 缓存编译数据,以提高 Rust 项目编译速度

Posted at 2020-11-07 Dev 


  • Rust 编译慢是真的无语,尤其是大型一点的项目执行下 cargo build --release 后我都可以先去吃个饭了。。。
  • Rust 编译慢的原因可以看下 Rust 编译模型之殇
  • 如果只是单个 workspace 的话,其实是没必要去设置 Sccahe, 除非有多个项目都依赖了相同版本的组件。
    • Rust 本身就支持单个 workspace 编译缓存的,但多个 workspace 如果引用了部分相同版本的组件,每个workspace或独立项目都要编译这些相同版本的组件,这样是没必要的,因此 mozilla 搞了个跨 workspace 缓存工具 Sccahe

Sccahe

  • 详细配置请查看官方仓库 mozilla/sccache
  • 使用 sccache 编译时会启动一个后台服务,因为这玩意是 CS 架构,不止支持本地缓存,还支持各种云,默认10分钟无数据交互就会自动关闭服务
  • 注意一点,如果当前状态(sccache --show-stats)与你自定义的配置不符,请停止服务(sccache --stop-server),刷新shell环境(source ~/.zshrc)

Config

brew install sccache # 直接取得二进制文件,而不是使用cargo重新编译

# 在 .zshrc 或其他shell的配置文件中添加下面几个环境变量:
# 设置最大缓存为 5G 默认为 10G
export SCCACHE_CACHE_SIZE="5G"
# 设置缓存保存路径,默认 MacOS 为 `~/Library/Caches/Mozilla.sccache`
export SCCACHE_DIR="$HOME/.cargo/sccache"
# sccache 程序路径
export RUSTC_WRAPPER="sccache"

# 查看缓存服务状态
sccache --show-stats

# 停止与启动
sccache --stop-server
sccache --start-server

Test

配置好后直接正常使用 cargo build 即可,这里编译下 RustScan 做测试
初次编译花了1m 8s,注意这个速度是提前下好依赖了(即不包括下载时间)

然后使用 cargo clean 清理编译数据,再次编译时 sccache 就开始发挥效果了,直接缩短为22.79s

 Previous post: EXHades' 2021 Records Next post: EXHades' 2019 Summed