目前,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是否有更简洁的方法,这不会引入额外的提取步骤?
答案 0 :(得分:2)
您可以postMessage
WebAssembly.Module
到Worker
。因此,您在主脚本中编译foo.wasm
,然后在postMessage
中编译,希望优化哪些实现以便不重新编译或重复代码(尽管此时并非所有实现都这样做)。然后,您只需要您的工作人员进行实例化。
实例化所需的一件事是importObject
,你传入的内容需要居住给那个工人!所以,即使你可以用这个.wasm
"你无法指定importObject
。
这是记录in structured clone,它也会影响IndexDB。