現在、Webワーカーは次のようにインスタンス化されています。
let worker = new Worker('worker.js');
次に、ブラウザはworker.js
をフェッチし、メッセージへの応答を開始できます。
WebAssemblyを使用してワーカーの機能を実装したいと思います。理想的には、次のようなことをしたいと思います。
let worker = new Worker('worker.wasm');
しかし、それは不可能だと私は確信しています。最も明白な代替手段は、worker.js
がworker.wasm
をフェッチし、それをコンパイルして実行することです。ただし、これは、別のスクリプト(worker.js
)をフェッチして実行することが唯一のジョブである1つのスクリプト(worker.wasm
)をフェッチすることを意味します。これは私にはひどく感じます。だから私の質問:Webワーカー内でWebAssemblyを使用するよりクリーンな方法はありますか?それは余分なフェッチステップを導入しませんか?
postMessage
a WebAssembly.Module
からWorker
にできます。したがって、メインスクリプトでfoo.wasm
をコンパイルしてから、postMessage
をコンパイルします。これにより、コードを再コンパイルまたは重複しないように最適化することが期待されます(ただし、現時点ではすべての実装がそうするわけではありません)。 。次に、インスタンス化するためにワーカーが必要になるだけです。
インスタンス化に必要なものの1つはimportObject
であり、渡すものはそのワーカーに常駐している必要があります。したがって、「この.wasm
の新しいワーカー」と言っても、importObject
を指定する方法はありません。
これは文書化されています 構造化クローンで これはIndexDBにも影響します。