小型 Wasm 檔案
wasm-bindgen
的核心目標之一是「僅為您使用的部分付費」的哲學,所以如果我們沒用多少,就不應該花費太多!因此,#[wasm_bindgen]
可以產生超小的執行檔
目前這段程式碼...
#![allow(unused)] 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