WebAssembly.Module

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

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

构造函数

WebAssembly.Module()

创建一个新的 Module 对象。

静态方法

WebAssembly.Module.customSections()

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

WebAssembly.Module.exports()

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

WebAssembly.Module.imports()

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

示例

将编译后的模块发送到 Worker

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

查看 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 接口
# 模块

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅