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