使用 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 檔案。