WebAssembly.compileStreaming()

WebAssembly.compileStreaming() 静态方法直接从流式底层源代码编译 WebAssembly.Module。如果需要在模块实例化之前编译模块,此函数很有用(否则,应该使用 WebAssembly.instantiateStreaming() 函数)。

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

语法

js
WebAssembly.compileStreaming(source)

参数

source

Response 对象或承诺,承诺将实现一个对象,该对象代表要流式传输和编译的 Wasm 模块的底层源。

返回值

一个承诺,该承诺解析为 WebAssembly.Module 对象,代表已编译的模块。

异常

  • 如果 source 不是 Response 或解析为 Response 的承诺,则承诺将拒绝,并出现 TypeError
  • 如果编译失败,则承诺将拒绝,并出现 WebAssembly.CompileError
  • 如果 source 是一个拒绝的承诺,则承诺将拒绝,并出现错误。
  • 如果 sourceResult 存在错误(例如 MIME 类型错误),则承诺将拒绝,并出现错误。

示例

流式编译

以下示例(请参阅我们托管在 GitHub 上的 compile-streaming.html 演示,以及 现场查看)直接从底层源流式传输 Wasm 模块,然后将其编译为 WebAssembly.Module 对象。因为 compileStreaming() 函数接受 Response 对象的承诺,所以你可以直接将来自调用 fetch() 的承诺传递给它,而无需等待承诺实现。

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

WebAssembly.compileStreaming(fetch("simple.wasm"))
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.exported_func());

然后,使用 WebAssembly.instantiate() 实例化生成的模块实例,并调用导出的函数。

规范

规范
WebAssembly Web API
# dom-webassembly-compilestreaming

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅