從14s到4s,我如何將 macOS上的 Rust 增量編譯時間減少70%?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust 1.51 發佈之後,我注意到裏面有一個新的特性 Cargo 可以幫助縮短 macOS 的編譯時間。升級啓用了這個選項周,我的增量開發重建時間從 14s 縮短到了 4s。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"加快構建速度"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust 1.51 發行說明中,有一章節是專門介紹如何配置調試信息。默認情況下,在 macOS 上,rustc 會運行一個名爲 dsymutil 的工具,該工具會分析二進制文件,然後構建調試信息目錄。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果使用 cargo run 來開發構建,那麼可能每次都會構建此調試信息,因爲它是開發配置文件的默認設置。而在 Rust 1.51 中,我們可以配置 split-debuginfo,使其跳過 dsymutil。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust 1.51 發行說明:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,Rust backtraces 切換到使用其它後端,該後端支持加載 debuginfo 無需運行 dsymutil,並且該功能目前已經穩定。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有人認爲,這個功能很快就會成爲 macOS 的默認配置。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如何配置呢?首先打開 Cargo.toml 並添加以下選項:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"null"},"content":[{"type":"text","text":"[profile.dev]split-debuginfo = \"unpacked\"\n"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你之前禁用了 debug,那麼就無法生成調試信息,自然也就無法看到速度提升。如果你之前因爲編譯時間太久而禁用了 debug,那麼現在可以重新打開,試試這個新方法吧。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"到底能快多少?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Cargo 新特性到底能幫助 debug 提升多少呢?我自己構建了一個 Puzzle Panda 的拼圖遊戲網站,該網站是使用 Rust 編寫的後端 API。經過我自己的測試,cargo run dev rebuilds 從之前的 14s 成功減少到了 4s,大約節省了 70% 的構建時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就項目規模而言,Puzzle Panda 的 Rust API 很小,但是它其中引入了很多傳遞性依賴關係,因此構建時間很長。14s 的 Dev rebuilds 時間是一直困擾我的問題,但是現在 split-debuginfo 的出現解決了我的難題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至於 split-debuginfo 在中型 Rust 項目中,是否會有一樣的項目,目前我還不確定。希望有感興趣的人,能夠實踐並分享給我們。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"參考鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/jakedeichert.com\/blog\/reducing-rust-incremental-compilation-times-on-macos-by-70-percent\/","title":"","type":null},"content":[{"type":"text","text":"https:\/\/jakedeichert.com\/blog\/reducing-rust-incremental-compilation-times-on-macos-by-70-percent\/"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章