WebAssembly.Instance() 构造函数

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

WebAssembly.Instance() 构造函数创建一个新的 Instance 对象,该对象是 WebAssembly.Module 的有状态、可执行的实例。

警告: 因为实例化大模块的开销很大,当一定要使用同步实例化时,开发者才应该使用 Instance;在所有其他情况下使用异步的 WebAssembly.instantiateStreaming() 方法。

语法

js
new WebAssembly.Instance(module, importObject)

参数

module

要实例化的 WebAssembly.Module 对象。

importObject 可选

一个对象,包含的是被导入到新创建的 Instance 的值,例如:函数或 WebAssembly.Memory 对象。module 中每一个申明的导入必须有一个匹配的属性,否则会抛出 WebAssembly.LinkError

异常

示例

同步实例化 WebAssembly 模块

可以调用 WebAssembly.Instance() 构造函数同步地实例化一个指定的 WebAssembly.Module 对象,例如:

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

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const mod = new WebAssembly.Module(bytes);
    const instance = new WebAssembly.Instance(mod, importObject);
    instance.exports.exported_func();
  });

然而,获得一个 Instance 的首选方式是使用异步的 WebAssembly.instantiateStreaming() 函数,例如像这样:

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

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

规范

Specification
WebAssembly JavaScript Interface
# dom-instance-instance

浏览器兼容性

参见