Rust 1-68 新特性:稀疏協議選項
Rust 1.68 中引入了一個獲取 crate 的新協議選項:sparse,這可以大大縮短編譯時間。
之前的 git 協議 (仍然是默認的) 克隆了一個存儲庫,索引註冊表中所有可用的 crate,但這已經開始遇到擴展限制,在更新存儲庫時有明顯的延遲。在訪問 crates.io 時,新協議將提供顯著的性能改進,因爲它只會下載關於你實際用到的 crate 子集的信息。
正好目前有一個源碼分析的項目,它使用了大量的 crate。我們可以測試一下。首先,讓我們在沒有稀疏協議的情況下試試:
$ cargo build
Compiling proc-macro2 v1.0.51
Compiling unicode-ident v1.0.6
Compiling quote v1.0.23
Compiling syn v1.0.107
Compiling autocfg v1.1.0
Compiling libc v0.2.139
Compiling cfg-if v1.0.0
Compiling version_check v0.9.4
Compiling log v0.4.17
Compiling once_cell v1.17.1
Compiling pin-project-lite v0.2.9
Compiling proc-macro-error-attr v1.0.4
Compiling lock_api v0.4.9
Compiling parking_lot_core v0.9.7
Compiling smallvec v1.10.0
Compiling tracing-core v0.1.30
Compiling proc-macro-error v1.0.4
Compiling memchr v2.5.0
Compiling futures-core v0.3.26
Compiling scopeguard v1.1.0
Compiling regex-syntax v0.6.28
Compiling getrandom v0.2.8
Compiling num-traits v0.2.15
Compiling tokio v1.25.0
Compiling indexmap v1.9.2
Compiling lazy_static v1.4.0
Compiling rand_core v0.6.4
Compiling parking_lot v0.12.1
Compiling regex-automata v0.1.10
Compiling mio v0.8.6
Compiling signal-hook-registry v1.4.1
Compiling socket2 v0.4.7
Compiling num_cpus v1.15.0
Compiling hashbrown v0.12.3
Compiling os_str_bytes v6.4.1
Compiling ppv-lite86 v0.2.17
Compiling heck v0.4.1
Compiling bytes v1.4.0
Compiling overload v0.1.1
Compiling nu-ansi-term v0.46.0
Compiling rand_chacha v0.3.1
Compiling clap_lex v0.2.4
Compiling matchers v0.1.0
Compiling regex v1.7.1
Compiling sharded-slab v0.1.4
Compiling tracing-log v0.1.3
Compiling atty v0.2.14
Compiling thread_local v1.1.7
Compiling bitflags v1.3.2
Compiling termcolor v1.2.0
Compiling textwrap v0.16.0
Compiling strsim v0.10.0
Compiling atoi v0.3.3
Compiling rand v0.8.5
Compiling tracing-attributes v0.1.23
Compiling tokio-macros v1.8.2
Compiling pin-project-internal v1.0.12
Compiling clap_derive v3.2.18
Compiling pin-project v1.0.12
Compiling async-stream-impl v0.3.4
Compiling tracing v0.1.37
Compiling tracing-subscriber v0.3.16
Compiling async-stream v0.3.4
Compiling tracing-futures v0.2.5
Compiling clap v3.2.23
Compiling tokio-stream v0.1.12
Compiling mini-redis-clone-8 v0.1.0 (......)
Finished dev [unoptimized + debuginfo] target(s) in 59.31s
正如你所看到的,它花了 59.31 秒的時間來編譯。
現在是時候開啓稀疏協議了
1,在項目的根目錄中創建一個. cargo 目錄
2,在. cargo 目錄下新建一個 config.toml 文件
3,在 config.toml 文件中加入如下配置項:
[registries.crates-io]
protocol = "sparse"
如圖:
然後執行如下命令:
cargo clean
cargo build
Compiling proc-macro2 v1.0.51
Compiling quote v1.0.23
Compiling unicode-ident v1.0.6
Compiling libc v0.2.139
Compiling autocfg v1.1.0
Compiling syn v1.0.107
Compiling cfg-if v1.0.0
Compiling version_check v0.9.4
Compiling log v0.4.17
Compiling once_cell v1.17.1
Compiling pin-project-lite v0.2.9
Compiling proc-macro-error-attr v1.0.4
Compiling lock_api v0.4.9
Compiling parking_lot_core v0.9.7
Compiling smallvec v1.10.0
Compiling proc-macro-error v1.0.4
Compiling tracing-core v0.1.30
Compiling scopeguard v1.1.0
Compiling regex-syntax v0.6.28
Compiling memchr v2.5.0
Compiling futures-core v0.3.26
Compiling getrandom v0.2.8
Compiling tokio v1.25.0
Compiling num-traits v0.2.15
Compiling indexmap v1.9.2
Compiling lazy_static v1.4.0
Compiling rand_core v0.6.4
Compiling regex-automata v0.1.10
Compiling parking_lot v0.12.1
Compiling mio v0.8.6
Compiling socket2 v0.4.7
Compiling num_cpus v1.15.0
Compiling signal-hook-registry v1.4.1
Compiling bytes v1.4.0
Compiling os_str_bytes v6.4.1
Compiling ppv-lite86 v0.2.17
Compiling overload v0.1.1
Compiling hashbrown v0.12.3
Compiling heck v0.4.1
Compiling rand_chacha v0.3.1
Compiling nu-ansi-term v0.46.0
Compiling clap_lex v0.2.4
Compiling matchers v0.1.0
Compiling regex v1.7.1
Compiling sharded-slab v0.1.4
Compiling tracing-log v0.1.3
Compiling thread_local v1.1.7
Compiling atty v0.2.14
Compiling strsim v0.10.0
Compiling textwrap v0.16.0
Compiling termcolor v1.2.0
Compiling bitflags v1.3.2
Compiling atoi v0.3.3
Compiling rand v0.8.5
Compiling tracing-attributes v0.1.23
Compiling tokio-macros v1.8.2
Compiling pin-project-internal v1.0.12
Compiling async-stream-impl v0.3.4
Compiling clap_derive v3.2.18
Compiling pin-project v1.0.12
Compiling async-stream v0.3.4
Compiling tracing v0.1.37
Compiling tracing-subscriber v0.3.16
Compiling tracing-futures v0.2.5
Compiling clap v3.2.23
Compiling tokio-stream v0.1.12
Compiling mini-redis-clone-8 v0.1.0 (......)
Finished dev [unoptimized + debuginfo] target(s) in 46.35s
編譯時間是 46.35 秒,編譯時間縮短了將近 13 秒。
稀疏協議目前正計劃成爲 crates.io 的默認協議。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/bct1LqLM_Fc9u1Xru8XMVg