跳至主要内容

使用流式 WebAssembly API

最有效的方式来获取、编译和实例化 WebAssembly 模块是使用 WebAssembly API 的流式变体。例如,您可以使用 instantiateStreamingfetch 结合使用,一步完成所有三个步骤

const { instance, module } = await WebAssembly.instantiateStreaming(
fetch("https://wpt.live/wasm/incrementer.wasm"),
);

const increment = instance.exports.increment as (input: number) => number;
console.log(increment(41));

请注意,.wasm 文件必须使用 application/wasm MIME 类型提供服务。如果您想在实例化之前对模块进行额外操作,您可以使用 compileStreaming

const module = await WebAssembly.compileStreaming(
fetch("https://wpt.live/wasm/incrementer.wasm"),
);

/* do some more stuff */

const instance = await WebAssembly.instantiate(module);
instance.exports.increment as (input: number) => number;

如果由于某种原因你无法使用流式方法,你可以回退到效率较低的compileinstantiate方法。例如,请参阅MDN 文档。要更深入地了解流式方法为何更高效,请参阅例如这篇文章