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.instantiate()函数加载 WebAssembly 代码。 - 通过
WebAssembly.Memory()/WebAssembly.Table()构造函数创建新的内存和表实例。 - 由
WebAssembly.CompileError()/WebAssembly.LinkError()/WebAssembly.RuntimeError()构造函数来提供 WebAssembly 中的错误信息。
接口
WebAssembly.CompileError-
表示在 WebAssembly 解码或验证时发生的错误。
WebAssembly.Global-
表示全局变量实例,既可从 JavaScript 访问,也可在多个
WebAssembly.Module实例间导入/导出。这支持多个模块的动态链接。 WebAssembly.Instance-
表示
WebAssembly.Module的带状态可执行实例。 WebAssembly.LinkError-
表示模块实例化过程中的错误(除启动函数中的陷阱外)。
WebAssembly.Memory-
该对象的
buffer属性是一个可调整大小的ArrayBuffer,用于存储 WebAssemblyInstance访问的原始内存字节。 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() 调用,然后它将把兑现的响应传递给随后的函数。
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> |