WebAssembly.compileStreaming()
WebAssembly.compileStreaming()
静态方法直接从流式底层源代码编译 WebAssembly.Module
。如果需要在模块实例化之前编译模块,此函数很有用(否则,应该使用 WebAssembly.instantiateStreaming()
函数)。
注意: 具有严格 内容安全策略 (CSP) 的网页可能会阻止 WebAssembly 编译和执行模块。有关允许 WebAssembly 编译和执行的更多信息,请参阅 script-src CSP。
语法
js
WebAssembly.compileStreaming(source)
参数
返回值
一个承诺,该承诺解析为 WebAssembly.Module
对象,代表已编译的模块。
异常
- 如果
source
不是Response
或解析为Response
的承诺,则承诺将拒绝,并出现TypeError
。 - 如果编译失败,则承诺将拒绝,并出现
WebAssembly.CompileError
。 - 如果
source
是一个拒绝的承诺,则承诺将拒绝,并出现错误。 - 如果
source
的Result
存在错误(例如 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 表格仅在浏览器中加载