[英]Using rust+webassembly for web development, how to solve the extra cost of wasm and js interaction
[英]How to use WebAssembly (wasm) code in a Web Worker?
目前,Web Worker被實例化:
let worker = new Worker('worker.js');
然后瀏覽器獲取worker.js
,它可以開始響應消息。
我想使用WebAssembly實現我的worker的功能。 理想情況下,我想做這樣的事情:
let worker = new Worker('worker.wasm');
但我很確定這是不可能的。 最明顯的替代方法是讓worker.js
獲取worker.wasm
並編譯並運行它。 但這意味着我們獲取一個腳本( worker.js
),其唯一的工作是獲取並運行另一個腳本( worker.wasm
)。 這對我來說很難受。 所以我的問題是:在Web Worker中使用WebAssembly是否有更簡潔的方法,這不會引入額外的提取步驟?
您可以將WebAssembly.Module
postMessage
給Worker
。 因此,您將在主腳本中編譯foo.wasm
,然后在postMessage
編譯它,這些實現應該進行優化,以便不重新編譯或重復代碼(盡管此時並非所有實現都這樣做)。 然后,您只需要您的工作人員進行實例化。
實例化所需的一件事是importObject
,你傳入的內容需要駐留在該worker中! 因此,即使您可以說“使用此.wasm
新工作者”,您也無法指定importObject
。
這在結構化克隆中有記錄,它也會影響IndexDB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.