使用流式 WebAssembly API
使用 WebAssembly API 的流式变体是 最有效 的获取、编译和实例化 WebAssembly 模块的方法。例如,您可以使用 instantiateStreaming
与 fetch
结合使用,一步完成所有三个步骤。
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;
如果由于某种原因您无法使用流式方法,您可以回退到效率较低的 compile
和 instantiate
方法。例如,请参阅 MDN 文档。有关流式方法性能更高的更深入的分析,请参阅 这篇文章。