如何在Web Worker中使用WebAssembly(wasm)代码?

时间:2017-11-02 20:17:46

标签: javascript web-worker webassembly

目前,Web Worker已实例化:

let worker = new Worker('worker.js');

然后,浏览器会抓取worker.js并开始响应消息。

我想使用WebAssembly实现我的工作人员的功能。理想情况下,我想做这样的事情:

let worker = new Worker('worker.wasm');

但我很确定这是不可能的。最明显的替代方法是让worker.js获取worker.wasm并编译并运行它。但这意味着我们获取一个脚本(worker.js),其唯一的工作是获取并运行另一个脚本(worker.wasm)。这对我来说很难受。所以我的问题是:在Web Worker中使用WebAssembly是否有更简洁的方法,这不会引入额外的提取步骤?

1 个答案:

答案 0 :(得分:2)

您可以postMessage WebAssembly.ModuleWorker。因此,您在主脚本中编译foo.wasm,然后在postMessage中编译,希望优化哪些实现以便不重新编译或重复代码(尽管此时并非所有实现都这样做)。然后,您只需要您的工作人员进行实例化。

实例化所需的一件事是importObject,你传入的内容需要居住给那个工人!所以,即使你可以用这个.wasm"你无法指定importObject

这是记录in structured clone,它也会影响IndexDB。