🧩 WebAssembly API 速查表(WebAssembly JS API Cheat Sheet)

53 阅读2分钟

🧩 WebAssembly API 速查表(WebAssembly JS API Cheat Sheet)


🧠 全局对象:WebAssembly

名称类型说明
WebAssembly.compile(bufferSource)Promise<Module>异步编译 ArrayBuffer 或 TypedArray 里的 wasm 字节码。
WebAssembly.compileStreaming(responsePromise)Promise<Module>边下载边编译。性能最优。
WebAssembly.instantiate(bufferSource, [importObject])Promise<{module, instance}>异步编译并实例化 wasm 模块。
WebAssembly.instantiateStreaming(responsePromise, [importObject])Promise<{module, instance}>边下载边编译并实例化。
WebAssembly.validate(bufferSource)boolean检查字节流是否是合法 wasm 模块。

🧱 构造器(类型对象)

构造器主要属性 / 方法说明
WebAssembly.ModuleWebAssembly.Module.exports(module)
WebAssembly.Module.imports(module)
已编译模块(无状态,可复用)。
WebAssembly.Instance.exports模块实例,包含导出函数、内存、表、全局变量等。
WebAssembly.Memory.buffer (ArrayBuffer)
.grow(pages)
线性内存(页大小 64 KB)。
WebAssembly.Table.length
.get(i)
.set(i, func)
.grow(n)
函数表(支持间接调用)。
WebAssembly.Global.value表示全局变量,可读写(若 mutable)。
WebAssembly.Tag 🆕.type异常类型(Exception Handling 提案)。
WebAssembly.Function 🆕构造签名化 Wasm 函数Typed Function References 提案。

⚙️ 错误类(Error Types)

错误类触发场景
WebAssembly.CompileError字节码非法或语法错误。
WebAssembly.LinkError导入 / 导出不匹配。
WebAssembly.RuntimeError运行时异常(越界访问、除 0 等)。

🪄 Promise 集成 (JSPI 提案)

名称类型说明
WebAssembly.Suspending(jsFunc)构造器把 JS 函数包装为“可挂起”的导入,允许 wasm 等待 Promise 完成。
WebAssembly.promising(wasmFunc)函数把 wasm 导出函数包装为返回 Promise 的异步函数。

示例

const imports = {
  env: { fetchData: new WebAssembly.Suspending(asyncFetch) }
};
const { instance } = await WebAssembly.instantiateStreaming(fetch("mod.wasm"), imports);
const runAsync = WebAssembly.promising(instance.exports.run);
await runAsync();

🧾 静态方法与辅助工具

名称说明
WebAssembly.Module.imports(module)获取模块导入列表。
WebAssembly.Module.exports(module)获取模块导出列表。
WebAssembly.validate(bytes)校验 wasm 二进制是否合法。

🧩 内部对象常用属性

对象属性类型说明
Instance.exportsobject导出表(函数、内存、全局、表)。
Memory.bufferArrayBuffer共享内存缓冲区。
.grow(pages)number扩展内存页数。
Table.lengthnumber当前函数表大小。
.get(index) / .set(index, func)function读写表项。
Global.valueany当前全局变量值。

🧮 示例调用流程

// 加载并实例化
const { instance } = await WebAssembly.instantiateStreaming(fetch("test.wasm"), {
  env: { log: console.log }
});

// 调用导出函数
instance.exports.main();

// 访问内存
const mem = instance.exports.memory;
const bytes = new Uint8Array(mem.buffer, 0, 16);

🧱 实验性 / 草案提案(部分环境支持)

提案新 API功能说明
JSPISuspending, promisingWasm 与 Promise 的互操作。
Exception HandlingTag原生异常支持。
Memory64扩展 Memory 寻址范围超 4 GB 线性内存。
Typed Function RefsWebAssembly.Function类型安全 JS → Wasm 函数引用。

🧾 总览表

分类成员
编译与实例化compile, compileStreaming, instantiate, instantiateStreaming, validate
类型对象Module, Instance, Memory, Table, Global, Tag, Function
错误类型CompileError, LinkError, RuntimeError
Promise 集成Suspending, promising
辅助函数Module.imports(), Module.exports()
内存 / 表操作Memory.grow(), Table.get(), Table.set(), Table.grow()