加速 Rust 編譯時間,掌握這個技巧,速度全面提升 30 ~ 40 %
大家好,我是漁夫。
今天分享主題,如何加快 Rust 項目編譯時間的技巧,如果你還是個初學(xué)者,可能還體會不到它多慢。
首先,建議確保你使用最新的 Rust 版本,因為,Rust 團隊正在努力改變這個事實,其實到今年為止,編譯器速度全面提高了 30-40% 了,一些項目的提高幅度高達 45% 以上。所以保持新版的好處。
更新命令在這里:rustup update。
cargo check 而非 cargo build
在許多數(shù)情況下,如果只想檢查代碼是否存在錯誤,是不必進行完整的編譯過程的。所以,盡量避免進行編譯,而是使用快速的代碼檢查、類型檢查和借用檢查。
如何搞呢,建議使用 cargo check 而不是 cargo build。因為 cargo check 會快速檢查代碼,而不會生成可執(zhí)行的二進制文件。
建議使用 cargo watch -c
這個好處很多了,當(dāng)使用 cargo watch -c 它是可以自動在代碼發(fā)生變化時進行代碼檢查,這樣你就可以更快地發(fā)現(xiàn)錯誤并進行及時修復(fù)。優(yōu)點:即時反饋、提高效率、減少錯誤和方便性。
切換到新的并行編譯器前端
你可以在 Nightly 版本中,啟用新的并行編譯器前端。使用 -Z threads=8 選項運行 Nightly 編譯器:
RUSTFLAGS="-Z threads=8" cargo +nightly build
也可以通過添加 -Z threads=8到~/.cargo/config.toml文件中將其設(shè)為默認值:
[build]
rustflags = ["-Z", "threads=8"]
還可以在 shell 的配置文件中設(shè)置別名(例如/.bashrc或/.zshrc):
alias cargo="RUSTFLAGS='-Z threads=8' cargo +nightly"
啟用 -Z threads=8 多線程編譯選項后,基準測試顯示編譯時間可能減少多達 50%。盡管實際性能提升會根據(jù)代碼而變化,但還是可以試試。
以下是并行編譯器前端運行中的可視化,官網(wǎng)也可以說明:
移除沒用的依賴項
刪除未使用的依賴,減少構(gòu)建時間和資源消耗及減小項目體積。
cargo install cargo-machete && cargo machete
找出代碼庫中編譯緩慢的 crate
運行 cargo build --timings 命令,這會提供關(guān)于每個 crate 編譯所花費的時間信息。
編譯時間分析
如果,你想更加深入地了解 Rust 編譯過程使用 cargo rustc -- -Zself-profile 進行編譯時間分析。生成的跟蹤文件可以使用火焰圖或 Chromium 分析器進行可視化。
測試,使用 Cargo Nextest 代替 cargo test
cargo install cargo-nextest
cargo nextest run
Cargo 提供了一個小型測試運行器,這非常方便。但特別是在需要構(gòu)建多個測試二進制文件時,由于其并行執(zhí)行模型,使用cargo nextest 可以比cargo test 提高高達 60% 的速度。以下是一些快速基準測試: