你應該知道的工具

這是一個精心挑選的出色工具清單,當使用 Rust 和 WebAssembly 進行開發時,你應該瞭解這些工具。

開發、建構和工作流程管理

wasm-pack | 儲存庫

wasm-pack 旨在成為一站式服務,用於建構和使用 Rust 生成的 WebAssembly,以便你在網路上或使用 Node.js 與 JavaScript 資料互用。wasm-pack 可協助你建構並將 Rust 生成的 WebAssembly 發布到 npm 註冊表,以便在工作流程中與你已經使用的其他 JavaScript 套件一起使用。

最佳化和處理 .wasm 二進位檔

wasm-opt | 儲存庫

wasm-opt 工具會讀取 WebAssembly 作為輸入,執行其轉換、最佳化和/或演算法的傳遞,然後輸出轉換後的 WebAssembly。透過 rustc 的方式在 LLVM 產生的 .wasm 二進位檔上執行它,通常會產生大小和執行速度都更快的 .wasm 二進位檔。此工具是 binaryen 項目的其中一部分。

wasm2js | 儲存庫

wasm2js 工具會將 WebAssembly 編譯成「幾乎是 asm.js」。這非常適合支援沒有 WebAssembly 執行環境的瀏覽器,例如 Internet Explorer 11。此工具是 binaryen 項目的其中一部分。

wasm-gc | 儲存庫

一個小型工具用於收集 WebAssembly 模組的垃圾並移除所有不需要的匯出、匯入、函數等等。這實際上是 WebAssembly 的 --gc-sections 連結器旗標。

由於以下兩個原因,您通常不需要自己使用此工具:

  1. rustc 現在有新版本的 lld,它支援 WebAssembly 的 --gc-sections 標記。這會自動啟用於 LTO 建置。
  2. wasm-bindgen CLI 工具會自動為您執行 wasm-gc

wasm-snip | 儲存庫

wasm-snip 會以 unreachable 指令取代 WebAssembly 函數的主體。

也許您知道在執行階段時某些函數永遠不會被呼叫,但編譯器沒辦法在編譯階段證明這點嗎?將它剪輯掉!然後再次執行 wasm-gc,它暫時呼叫的所有函數(在執行階段時可能永遠不會被呼叫)也會被移除。

這有助於在非偵錯生產建置中強制移除 Rust 的恐慌架構。

檢查 .wasm 二進位檔

twiggy | 儲存庫

twiggy.wasm 二進位檔的程式碼大小分析工具。它會分析二進位檔的呼叫圖形,用於回答類似以下的問題:

  • 這個函數一開始為什麼會放入二進位檔中?也就是說,哪些匯出函數會暫時呼叫它?
  • 這個函數的保留大小是多少?也就是說,如果我移除它以及在移除後會變成廢棄程式碼的所有函數,可以省下多少空間。

使用 twiggy 讓您的二進位檔更精簡!

wasm-objdump | 儲存庫

列印有關 .wasm 二進位檔及其各個區段的低階詳細資料。也可將其分解組譯成 WAT 文字格式。就像 objdump,但是適用於 WebAssembly。這是 WABT 專案的一部分。

wasm-nm | 儲存庫

列出在 .wasm 二進位檔中定義的,已導入、已匯出及私有函式符號。就像 nm,但是適用於 WebAssembly。