使用 wasm-bindgen
針對大小進行最佳化
Rust 和 WebAssembly 工作群組的 生命遊戲教學 有一個關於 縮小 Wasm 程式碼大小 的優秀章節,但還有一些 wasm-bindgen
特定的項目需要提到!
首先,wasm-bindgen
的設計是輕量級的,並且秉持「只為你使用的東西付費」的心態。如果您懷疑 wasm-bindgen
使您的程式膨脹,這是一個錯誤,我們很想知道!請隨時 提交問題,即使這是一個問題!
要分析什麼
使用 wasm-bindgen
,有幾個不同的檔案需要測量大小。第一個是編譯器本身的輸出,通常位於 target/wasm32-unknown-unknown/release/foo.wasm
。此檔案未針對大小進行最佳化,您不應測量它。使用 wasm-bindgen
連結時,編譯器的輸出在設計上會比它需要的要大,wasm-bindgen
CLI 工具會自動從二進位檔案中刪除所有不需要的功能。
這為我們留下了兩個主要生成的檔案來測量大小
-
生成的 wasm - 執行
wasm-bindgen
CLI 工具後,您會在--out-dir
中得到一個看起來像foo_bg.wasm
的檔案。此檔案是wasm-bindgen
的最終完成成品,它反映了您將發佈的應用程式的大小。所有 在程式碼大小教學中提到的最佳化 都將有助於縮小此二進位檔案的大小,所以請盡情使用! -
生成的 JS - 執行
wasm-bindgen
後的另一個檔案是一個foo.js
檔案,這是其他 JS 程式碼實際導入的檔案。此檔案已產生為盡可能小(不包括不需要的功能)。但是,JS 並未經過醜化或最小化,而是仍然是人類可讀且可偵錯的。預期您會在應用程式中執行 JS 輸出的醜化器或捆綁器,以進一步將其最小化。如果您發現我們可以進一步縮減輸出 JS 大小(或使其更適合捆綁器最小化)的方法,請告訴我們!
範例
作為一個範例,wasm-bindgen
儲存庫 包含一個範例,關於產生小型 Wasm 二進位檔案,並展示如何產生一個用於加兩個數字的小型 wasm 檔案。