WebAssembly.instantiateStreaming()

**WebAssembly.instantiateStreaming()** 静态方法直接从流式传输的底层源代码编译和实例化 WebAssembly 模块。这是加载 Wasm 代码最有效、最优化的方式。

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

语法

js
WebAssembly.instantiateStreaming(source, importObject)

参数

source

一个Response 对象或一个将以一个对象为结果的承诺,表示要流式传输、编译和实例化的 Wasm 模块的底层源代码。

importObject 可选

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

返回值

一个Promise,它解析为一个ResultObject,其中包含两个字段

异常

示例

实例化流式传输

以下示例(请参阅我们在 GitHub 上的instantiate-streaming.html 演示,以及实时查看它)直接从底层源代码流式传输 Wasm 模块,然后对其进行编译和实例化,承诺将以一个 ResultObject 为结果。因为 instantiateStreaming() 函数接受一个针对Response 对象的承诺,所以您可以直接将其传递给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 的实例成员,并调用其中包含的导出的函数。

**注意:** 为了使此方法起作用,.wasm 文件应由服务器以 application/wasm MIME 类型返回。

规范

规范
WebAssembly Web API
# dom-webassembly-instantiatestreaming

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅