admin管理员组文章数量:1402433
Currently, a Web Worker is instantiated thus:
let worker = new Worker('worker.js');
The browser then fetches worker.js
and it can start responding to messages.
I'd like to implement my worker's functionality using WebAssembly. Ideally, I'd like to do something like this:
let worker = new Worker('worker.wasm');
But I'm pretty sure that's not possible. The most obvious alternative is to have worker.js
fetch worker.wasm
and pile and run it. But this means we fetch one script (worker.js
) whose only job is to fetch and run another script (worker.wasm
). This feels gross to me. And so my question: is there a cleaner way of using WebAssembly within a Web Worker, which won't introduce an extra fetch step?
Currently, a Web Worker is instantiated thus:
let worker = new Worker('worker.js');
The browser then fetches worker.js
and it can start responding to messages.
I'd like to implement my worker's functionality using WebAssembly. Ideally, I'd like to do something like this:
let worker = new Worker('worker.wasm');
But I'm pretty sure that's not possible. The most obvious alternative is to have worker.js
fetch worker.wasm
and pile and run it. But this means we fetch one script (worker.js
) whose only job is to fetch and run another script (worker.wasm
). This feels gross to me. And so my question: is there a cleaner way of using WebAssembly within a Web Worker, which won't introduce an extra fetch step?
-
"And so my question: is there a cleaner way of using WebAssembly within a Web Worker, which won't introduce an extra fetch step?" What is purpose of using
Worker
in the first instance ifWorker
is not intended to be used? No actual problem statement exists at Question. – guest271314 Commented Nov 2, 2017 at 20:31 - @guest271314 one benefit is that wasm would be run in a different thread – nalply Commented Nov 27, 2022 at 15:02
- Probably you could put the wasm in a SharedArrayBuffer, didn't try it out but I could imagine that with a SharedArrayBuffer no copying is needed. – nalply Commented Nov 27, 2022 at 15:03
- This repository contains a couple of examples for using web workers with Wasm (piled from Rust): github./sgasse/wasm_worker_interaction – Matthias Braun Commented Jan 21, 2023 at 20:28
1 Answer
Reset to default 2You can postMessage
a WebAssembly.Module
to a Worker
. You'd therefore pile foo.wasm
in your main script, and then postMessage
it, which implementations are expected to optimize so as not to repile or duplicate code (though at this time not all implementations do so). You then merely need your worker to instantiate.
One thing you need for instantiate is an importObject
, and what you pass in needs to be resident to that worker! So even if you could say "new worker with this .wasm
" you wouldn't have a way to specify the importObject
.
This is documented in structured clone, which also affects IndexDB.
本文标签: javascriptHow to use WebAssembly (wasm) code in a Web WorkerStack Overflow
版权声明:本文标题:javascript - How to use WebAssembly (wasm) code in a Web Worker? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744327817a2600812.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论