縮小 .wasm
大小
例如,我們透過網路傳送給客戶端的 .wasm
二進制檔案(例如我們的 Game of Life 網頁應用程式),我們希望密切注意程式碼大小。我們的 .wasm
檔案越小,網頁載入的速度就越快,使用者也會越滿意。
我們可以透過建置設定將 Game of Life .wasm
二進制檔案縮小到多小?
花點時間檢視我們可以調整的建置設定選項,以取得更小的 .wasm
程式碼大小。
使用預設的發佈建置設定(不含除錯符號),我們的 WebAssembly 二進制檔案大小為 29,410 位元組
$ wc -c pkg/wasm_game_of_life_bg.wasm
29410 pkg/wasm_game_of_life_bg.wasm
在啟用 LTO,設定 opt-level = "z"
並執行 wasm-opt -Oz
之後,產生的 .wasm
二進制檔案縮小為只有 17,317 位元組
$ wc -c pkg/wasm_game_of_life_bg.wasm
17317 pkg/wasm_game_of_life_bg.wasm
如果我們用 gzip
進行壓縮(幾乎所有 HTTP 伺服器都會執行這項動作),我們可以將檔案大小縮小至 9,045 位元組!
$ gzip -9 < pkg/wasm_game_of_life_bg.wasm | wc -c
9045
練習
-
使用
wasm-snip
工具 從 Game of Life 的.wasm
二進制檔案中移除會引發恐慌的基礎架構功能。它可以節省多少位元組? -
使用和不使用
wee_alloc
作為其全域配置器來建立我們的生命遊戲板條箱。我們複製來啟動這個專案的rustwasm/wasm-pack-template
範本有一個「wee_alloc」貨運功能,你可以透過將其新增至wasm-game-of-life/Cargo.toml
中的[features]
區段的default
鍵來啟用它[features] default = ["wee_alloc"]
使用
wee_alloc
可以為.wasm
檔案縮減多少大小? -
我們永遠只會執行一個
Universe
實例化,因此與其提供一個建構函式,我們可以輸出用於操作一個static mut
全域實例的運算。如果此全域實例也使用早期章節討論的雙重緩衝技巧,我們可以讓這些緩衝區也成為static mut
全域變數。這個動作會從我們的生命遊戲實作中移除所有動態配置,而且我們可以讓它成為一個不包含配置器的#![no-std]
板條箱。完全移除配置器相依性後,可以從.wasm
中移除多少大小?