小型 Wasm 檔案

檢視完整原始碼線上檢視已編譯的範例

`wasm-bindgen` 的核心目標之一是「只為你使用的東西付費」的哲學,所以如果我們不使用太多,我們就不應該付出太多!因此 `#[wasm_bindgen]` 可以產生超小的可執行檔

目前這段程式碼...


# #![allow(unused_variables)]
#fn main() {
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn add(a: u32, b: u32) -> u32 {
    a + b
}

#}

產生一個 710 位元組的 Wasm 二進位檔

$ ls -l add_bg.wasm
-rw-rw-r-- 1 alex alex 710 Sep 19 17:32 add_bg.wasm

如果你執行 wasm-opt,一個用於最佳化 WebAssembly 的 C++ 工具,你可以讓它變得更小!

$ wasm-opt -Os add_bg.wasm -o add.wasm
$ ls -l add.wasm
-rw-rw-r-- 1 alex alex 172 Sep 19 17:33 add.wasm

而且果然,使用 wasm2wat 工具,它非常小!

$ wasm2wat add.wasm
(module
  (type (;0;) (func (param i32 i32) (result i32)))
  (func (;0;) (type 0) (param i32 i32) (result i32)
    get_local 1
    get_local 0
    i32.add)
  (table (;0;) 1 1 anyfunc)
  (memory (;0;) 17)
  (global (;0;) i32 (i32.const 1049118))
  (global (;1;) i32 (i32.const 1049118))
  (export "memory" (memory 0))
  (export "__indirect_function_table" (table 0))
  (export "__heap_base" (global 0))
  (export "__data_end" (global 1))
  (export "add" (func 0))
  (data (i32.const 1049096) "invalid malloc request"))

另外,別忘了以發行模式編譯以獲得最小的二進位檔!對於較大的應用程式,您可能還需要開啟 LTO 以產生最小的二進位檔

[profile.release]
lto = true