WebAssembly

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

和大多数全局对象不一样,WebAssembly不是一个构造函数(它不是一个函数对象)。它类似于 Math 对象或者 Intl 对象,Math 对象也是一个命名空间对象,用于保存数学常量和函数;Intl则是用于国际化和其他语言相关函数的命名空间对象。

描述

WebAssembly对象主要用于:

方法

WebAssembly.instantiate()
用于编译和实例化 WebAssembly 代码的主 API,返回一个 Module 和它的第一个Instance实例。
WebAssembly.instantiateStreaming()
直接从流式底层源编译和实例化WebAssembly模块,同时返回Module及其第一个Instance实例。
WebAssembly.compile()
把 WebAssembly 二进制代码编译为一个 WebAssembly.Module ,不进行实例化。
WebAssembly.compileStreaming()
直接从流式底层源代码编译WebAssembly.Module ,将实例化作为一个单独的步骤。
WebAssembly.validate()
校验 WebAssembly 二进制代码的类型数组是否合法,合法则返回 true ,否则返回 false 。

构造器

WebAssembly.Global()
创建一个新的WebAssembly Global 全局对象.
WebAssembly.Module()
创建一个新的WebAssembly Module模块对象。
WebAssembly.Instance()
创建一个新的WebAssembly Instance实例对象。
WebAssembly.Memory()
创建一个新的WebAssembly Memory内存对象。
WebAssembly.Table()
创建一个新的WebAssembly Table表格对象。
WebAssembly.CompileError()
创建一个新的WebAssembly CompileError编译错误对象。
WebAssembly.LinkError() (en-US)
创建一个新的WebAssembly LinkError链接错误对象。
WebAssembly.RuntimeError()
创建一个新的WebAssembly RuntimeError运行时错误对象。

示例

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

var importObject = { imports: { imported_func: arg => console.log(arg) } };

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

返回的ResultObject实例的成员可以被随后访问到,可以调用实例中被导出的方法。

规范

Specification Status Comment
WebAssembly JavaScript Interface
WebAssembly
Working Draft 初始草案定义

BCD tables only load in the browser