我无法在我的网络工作线程中加载一个简单的 WASM 函数,该函数对两个数字求和。
我在我的主/索引脚本中尝试过它,工作正常。但是,将代码移入 Web Worker 会破坏代码。看起来 sum() 代码没有在我的网络工作线程中执行。但是,我没有得到任何有用的日志或错误消息来进一步调试代码。为了更好地理解这里是我的示例存储库
例如,运行 vite 代码会向我显示以下日志:
[vite] connecting... client.ts:19:8
Message posted to worker with numbers 1 and 2. main.ts:13:10
[vite] connected. client.ts:175:14
一旦在 Web Worker 上执行 postMessage(),我希望这里会出现更多日志行。似乎 Web Worker 在调用 wasm 模块时停止了。
有什么想法吗?到目前为止谢谢!
更新:
似乎是一个时间问题(至少对于 vite 插件来说)。在主脚本中设置 断点 为我提供了所有所需的控制台输出:
Message posted to worker with numbers 1 and 2.
worker.ts:4 Worker is calculating with data... {number1: 1, number2: 2}
main.ts:20 Message received, sum is: 3
但是,这看起来并没有修复 webpack 模块。另外我不知道为什么会发生这种情况以及如何在没有断点的情况下修复它......
我想我已经解决了这个问题。导入是问题所在。
使用动态导入而不是静态导入对我来说很有效:
onmessage = (msg: MessageEvent<{ number1: number; number2: number }>) => {
import("wasm-sum").then((wasm) => {
console.log("Worker is calculating with data...", msg.data);
const sum = wasm.sum(msg.data.number1, msg.data.number2);
postMessage(sum);
});
};
我已经更新了我的示例存储库