--- title: WebAssembly.instantiateStreaming() slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming ---
WebAssembly.instantiateStreaming()
方法直接从流式底层源编译和实例化WebAssembly模块。这是加载wasm代码一种非常有效的优化方式。
Promise<ResultObject> WebAssembly.instantiateStreaming(source, importObject);
Instance
中值的对象,例如方法 或 {{jsxref("WebAssembly.Memory")}} 对象。每个已编译模块的声明导入必须有一个匹配属性,否则抛出 WebAssembly.LinkError 异常。一个 Promise
,通过resolve返回一个包含两个属性的 ResultObject
:
module
: {{jsxref("WebAssembly.Module")}} 对象表示编译完成的WebAssembly模块. 这个Module
能够再次被实例化 或 通过postMessage()共享。instance
: {{jsxref("WebAssembly.Instance")}} 对象包含WebAssembly所有公开方法 Exported WebAssembly functions.下面的示例 (在GitHub上查看 instantiate-streaming.html 示例, 并且也可 view it live ) 直接从基础源传输一个 .wasm 模块,然后进行编译和实例化, Promise 履行后返回一个 ResultObject
. 因为 instantiateStreaming()
方法允许履行后返回{{domxref("Response")}}对象的Promise,你可以直接传递一个 {{domxref("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 |
---|---|---|
{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}} | {{Spec2('WebAssembly Embedding')}} | Initial draft definition. |
{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}