WebAssembly.instantiateStreaming()

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.instantiateStreaming() 函数直接从流式底层源编译并实例化 WebAssembly 模块。这是加载 Wasm 代码的最有效、最优化的方式。

备注: 具有严格的内容安全策略(CSP)的网页可能会阻止 WebAssembly 模块的编译和执行。请参阅 script-src CSP 以了解更多有关允许 WebAssembly 编译和执行的信息。

语法

js
WebAssembly.instantiateStreaming(source, importObject)

参数

source

一个 Response 对象或一个会兑现为 Response 的 promise,其表示你想要传输、编译和实例化的 Wasm 模块的底层源。

importObject 可选

包含一些想要导入到新创建的 Instance 中的值的对象,例如函数或 WebAssembly.Memory 对象。每个已编译模块的声明导入必须有一个匹配属性,否则抛出 WebAssembly.LinkError 异常。

返回值

一个 Promise,会兑现为一个包含两个属性的 ResultObject

异常

示例

下面的示例(在 GitHub 上查看 instantiate-streaming.html 示例,也可在线查看)直接从基础源传输一个 Wasm 模块,然后进行编译和实例化,Promise 会兑现 ResultObject。因为 instantiateStreaming() 函数接受兑现后返回 Response 对象的 Promise,你可以直接传递一个 fetch() 调用,它会在兑现后将 response 传递给该函数。

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

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

然后访问 ResultObject 的实例成员,并调用包含的导出函数。

备注: 为了使其工作,服务器应该返回一个 application/wasm MIME 类型的 .wasm 文件。

规范

Specification
WebAssembly Web API
# dom-webassembly-instantiatestreaming

浏览器兼容性

BCD tables only load in the browser

参见