此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

WebAssembly

Baseline Widely available *

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

* Some parts of this feature may have varying levels of support.

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

和大多数全局对象不一样,WebAssembly 不是一个构造函数(它不是一个函数对象)。它类似于 Math 对象或者 Intl 对象,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/JavaScript 边界内及跨边界抛出、捕获和重新抛出的 WebAssembly 异常对象。

静态方法

WebAssembly.compile()

把 WebAssembly 二进制代码编译为一个 WebAssembly.Module,不进行实例化。

WebAssembly.compileStreaming()

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

WebAssembly.instantiate()

用于编译和实例化 WebAssembly 代码的主 API,返回一个 Module 和它的第一个 Instance 实例。

WebAssembly.instantiateStreaming()

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

WebAssembly.validate()

校验 WebAssembly 二进制代码的类型数组是否合法,合法则返回 true,否则返回 false

示例

下面的示例(请参见 GitHub 上的 Instantiate-streaming.html 演示,并查看在线演示)直接从流式底层源传输 .wasm 模块,然后对其进行编译和实例化,并通过 ResultObject 兑现 promise。由于 instantiateStreaming() 函数接受对 Response 对象的 promise,因此你可以直接向其传递 fetch() 调用,然后它将把兑现的响应传递给随后的函数。

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 属性,并调用其中包含的导出函数。

规范

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

浏览器兼容性

参见