Javascript 仅加载WebAssembly模块一次/单个
我想在React应用程序中使用WebAssembly模块。应用程序启动时加载模块。现在我想在另一个Javascript模块中重用这个wasm模块 如何在其他JS模块中重用这些wasm模块?我真的必须再次加载模块吗 在主模块中加载wasm:Javascript 仅加载WebAssembly模块一次/单个,javascript,import,singleton,webassembly,Javascript,Import,Singleton,Webassembly,我想在React应用程序中使用WebAssembly模块。应用程序启动时加载模块。现在我想在另一个Javascript模块中重用这个wasm模块 如何在其他JS模块中重用这些wasm模块?我真的必须再次加载模块吗 在主模块中加载wasm: Promise.all([ import("webassembly-tests-rust") //... ]) .then(modules => { // how to store the module to ma
Promise.all([
import("webassembly-tests-rust")
//...
])
.then(modules => {
// how to store the module to make it available in other modules?
wasm["rust"] = modules[0];
//...
})
其他模块:
wasm.rust.somefunction();
这样行吗 wasm.js
let wasm
export const getWasm = () =>
wasm
? Promise.resolve(wasm)
: import('webassembly-tests-rust').then(_wasm => {
wasm = _wasm;
return wasm;
})
import getWasm from 'wasm.js'
Promise.all([
getWasm
//...
])
.then(modules => {
modules[0].someFunction = () => console.log('foo')
//...
})
module.js
let wasm
export const getWasm = () =>
wasm
? Promise.resolve(wasm)
: import('webassembly-tests-rust').then(_wasm => {
wasm = _wasm;
return wasm;
})
import getWasm from 'wasm.js'
Promise.all([
getWasm
//...
])
.then(modules => {
modules[0].someFunction = () => console.log('foo')
//...
})
其他模块:
import getWasm from 'wasm.js'
getWasm().then(wasm => wasm.somefunction()) // console.log('foo')
为什么不将wasm模块设置为ES6模块,然后期望它发生树震动呢?您的意思是静态
从“模块”导入wasm代码>?WebAssembly模块不支持此操作。您必须异步加载它们(dynamicimport或fetch())。我目前的解决方案是将加载的模块保存在window.wasm
下,但我认为有更好的方法。