WebAssembly.Module

Baseline 广泛可用 *

此功能已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 10 月以来,它已在各大浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

WebAssembly.Module 对象包含已由浏览器编译的无状态 WebAssembly 代码 — 这可以被 高效地与 Workers 共享,并可以实例化多次。

注意: WebAssembly.Module 对象与 Emscripten 中使用的 Module 对象无关。

构造函数

WebAssembly.Module()

创建一个新的 Module 对象。

静态方法

WebAssembly.Module.customSections()

给定一个 Module 和字符串,返回该模块中具有给定字符串名称的所有自定义节内容的副本。

WebAssembly.Module.exports()

给定一个 Module,返回一个包含所有已声明导出项描述的数组。

WebAssembly.Module.imports()

给定一个 Module,返回一个包含所有已声明导入项描述的数组。

示例

将编译后的模块发送到 worker

以下示例使用 WebAssembly.compileStreaming() 方法编译加载的 simple.wasm 字节码,并使用 postMessage() 将生成的 Module 实例发送给一个 worker

请查看 index-compile.html源代码实时预览

js
const worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

Worker 函数 wasm_worker.js 定义了一个供模块使用的导入对象。然后,该函数设置了一个事件处理程序,用于接收来自主线程的模块。当接收到模块时,我们使用 WebAssembly.instantiate() 方法从此模块创建一个实例,并调用其中一个导出的函数。

js
const importObject = {
  my_namespace: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

onmessage = (e) => {
  console.log("module received from main thread");
  const mod = e.data;

  WebAssembly.instantiate(mod, importObject).then((instance) => {
    instance.exports.exported_func();
  });
};

规范

规范
WebAssembly JavaScript 接口
# 模块

浏览器兼容性

另见