WebAssembly

WebAssembly JavaScript 对象充当所有与 WebAssembly 相关的功能的命名空间。

与大多数其他全局对象不同,WebAssembly 不是构造函数(它不是函数对象)。您可以将其与 Math 进行比较,后者也是数学常数和函数的命名空间对象,或者与 Intl 进行比较,后者是国际化构造函数和其他语言敏感函数的命名空间对象。

描述

WebAssembly 对象的主要用途是

接口

WebAssembly.CompileError

指示 WebAssembly 解码或验证期间发生的错误。

WebAssembly.Global

表示全局变量实例,可从 JavaScript 访问,并且可在多个 WebAssembly.Module 实例之间导入/导出。这允许多个模块的动态链接。

WebAssembly.Instance

WebAssembly.Module 的有状态、可执行实例

WebAssembly.LinkError

指示模块实例化期间发生的错误(除了来自启动函数的 陷阱)。

WebAssembly.Memory

一个对象,其 buffer 属性是一个可调整大小的 ArrayBuffer,它保存由 WebAssembly Instance 访问的原始内存字节。

WebAssembly.Module

包含已由浏览器编译的无状态 WebAssembly 代码,可以有效地 与 Worker 共享,并且可以多次实例化。

WebAssembly.RuntimeError

每当 WebAssembly 指定 陷阱 时抛出的错误类型。

WebAssembly.Table

表示 WebAssembly 表的类似数组的结构,该结构存储 引用,例如函数引用。

WebAssembly.Tag

表示 WebAssembly 异常类型的对象。

WebAssembly.Exception

可以抛出、捕获和重新抛出的 WebAssembly 异常对象,无论是在 WebAssembly/JavaScript 边界内还是跨边界。

静态方法

WebAssembly.instantiate()

编译和实例化 WebAssembly 代码的主要 API,返回 Module 及其第一个 Instance

WebAssembly.instantiateStreaming()

直接从流式底层源编译和实例化 WebAssembly 模块,返回 Module 及其第一个 Instance

WebAssembly.compile()

从 WebAssembly 二进制代码编译 WebAssembly.Module,将实例化作为单独的步骤。

WebAssembly.compileStreaming()

直接从流式底层源编译 WebAssembly.Module,将实例化作为单独的步骤。

WebAssembly.validate()

验证给定的 WebAssembly 二进制代码的类型化数组,返回字节是否为有效的 WebAssembly 代码 (true) 或不是 (false)。

示例

流式传输 Wasm 模块,然后编译并实例化它

以下示例(请参阅我们在 GitHub 上的 instantiate-streaming.html 演示,以及 在线查看)直接从底层源流式传输 Wasm 模块,然后编译并实例化它,promise 以 ResultObject 形式完成。由于 instantiateStreaming() 函数接受 Response 对象的 promise,因此您可以直接将 fetch() 调用传递给它,它将在 promise 完成时将响应传递到函数中。

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

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

然后访问 ResultObject.instance 属性,并调用包含的导出函数。

规范

规范
WebAssembly JavaScript 接口
# webassembly-namespace

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅