WebAssemblyでDOMにアクセスする


11

最近、一部のプロジェクトでWebAssemblyの使用を開始しました。WasmはjavaScriptより速いと聞いたので、これを行っています。
実際に最初のWasmプロジェクトを開始したとき、C ++でDOMを操作する方法がわからないことに気付きました。
Wasmを使用してこれを行う方法はありますか?


DOMの操作は半分の道のりであり、JavaScriptからWebアセンブリをコールバックする必要もあります。
amirouche

スクリプトのパフォーマンスが本当に重要でない限り、私はJavaScriptを使用することを検討します。Webアセンブリを使用するWebサイトの半分は悪意のある目的使用しているように見えるため、一部のユーザーは既にブラウザーでWebアセンブリを無効にしようとしています。
mzuther

回答:


1

最近、一部のプロジェクトでWebアセンブリの使用を開始しました。wasmはjavascriptより速いと聞いたので、これを行っています。

WebAssemblyはJavaScriptよりも高速ですが、特定のユースケースに限られます。WebAssemblyを使用すると、ブラウザーはコードのダウンロードとコンパイルに必要な作業が少なくなり、起動時間が短縮されます。ただし、WebAssemblyの実行時のパフォーマンスは、通常、JavaScriptの2〜3倍しかない場合。非常に優れた実用的な比較については、次の記事を参照してください。

https://hacks.mozilla.org/2018/01/oxidizing-source-maps-with-rust-and-webassembly/

ただし、WebAssemblyには直接DOMアクセスがないため、その優れたパフォーマンスにもかかわらず、余分なI / Oオーバーヘッドのために、ユースケースでJavaScriptよりも遅い場合があります。

このため、現在、人々はアルゴリズム/計算集約型のタスクでWebAssemblyを使用して最も成功しています。

私はc ++でdomを操作する方法を知らないことに気付きました。wasmを使用してこれを行う方法はありますか?

DOMを操作するには、JavaScriptホストを介してこれを行う必要があります。WebAssemblyモジュールは、代わりにDOMを操作するように要求するメッセージをJavaScriptに送信する必要があります。

これは非常に一般的な課題であるため、問題を解決するさまざまなコミュニティプロジェクトがあります。C ++を使用しているので、これは興味深いかもしれません。

https://github.com/mbasso/asm-dom

将来的には、これがより簡単になるでしょう。インターフェースタイプなどの提案により、ホスト環境との相互運用が容易になり、WebAssemblyから直接Web APIを呼び出すことができるようになります。


1

残念ながら、DOMにはブラウザーのメインJavaScriptスレッド内でのみアクセスできます。Service Workers、Web Workers、およびWeb AssemblyモジュールはDOMアクセスを持ちません。WASMから取得する最も近い操作は、Preact / React などの状態ベースのUIコンポーネントを使用してメインスレッドに渡され、メインスレッドによってレンダリングされる状態オブジェクトを操作することです。

JSONシリアル化は、postMessage()またはBroadcast Channelsで状態を渡すために最もよく使用されます。TransferrableJSONのシリアル化/非シリアル化のオーバーヘッドを回避するよりパフォーマンスの高いメッセージのために、ビットパッキングまたはバイナリオブジェクトをArrayBuffers と共に使用できます。


「残念ながら、DOMはブラウザーのメインJavaScriptスレッド内でのみアクセスできます」-これは事実ですが、WebAssemblyがDOMと対話できないのはそのためではありません。
ColinE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.