縮小 .wasm
大小
對於我們透過網路傳送給客戶端的 .wasm
執行檔,例如生命遊戲網路應用程式,我們必須注意程式碼大小。.wasm
愈小,網頁載入速度就愈快,使用者的滿意度就愈高。
我們如何透過組建組態來縮小生命遊戲 .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
工具 從我們生命遊戲的.wasm
執行檔中移除會引發錯誤的基底架構函式。它可以節省多少位元組? -
使用
wee_alloc
作為全局分配器,或不使用它來建構我們的「生命遊戲」crate。我們複製用於開啟此專案的rustwasm/wasm-pack-template
範本具有「wee_alloc」Cargo 功能,你可以透過將它新增到wasm-game-of-life/Cargo.toml
中[features]
區段的default
鍵來啟用它。[features] default = ["wee_alloc"]
使用
wee_alloc
可以減少多少.wasm
二進位檔案的大小? -
我們只會實例化一個
Universe
,因此,我們可以匯出一些操作來操作一個static mut
全域實例,而不是提供一個建構函數。如果這個全域實例也使用前面章節討論的雙緩衝技術,我們可以讓這些緩衝區也成為static mut
全域變數。這從我們的「生命遊戲」實作中移除了所有的動態配置,而且我們可以讓它成為一個#![no_std]
Crate,其中不包含分配器。透過完全移除分配器相依性,我們可以移除多少.wasm
大小?