ITエンジニア/デザイナ向けにオープンソースを毎日紹介

JavaScriptはシングルスレッドなので、重たい処理を実行するとWebブラウザが固まってしまいます。それを防ぐため、Web Workerというバックグラウンドで処理を実行するAPIがあります。

しかしWeb WorkerではDOM操作ができないという欠点があります。それを解決してくれるのがVia.jsです。

Via.jsの使い方

デモです。ボタンを押すとWeb Audio APIを実行します。

その他、DOM操作もできます。

  1. const document = via.document;
  2. const button = document.createElement("button");
  3. button.textContent = "Click me";
  4. button.style.fontWeight = "bold";
  5. button.addEventListener("click", () =>
  6. {
  7. console.log("[Worker] Click event");
  8. });
  9. document.body.appendChild(button);

documentではなくvia.documentを使うのが一つのコツですが、それ以外についてはほぼそのままDOMが利用できます。また、ドキュメントのタイトルやURLを取得する場合には get を使います。

  1. const docTitle = await get(via.document.title);

仕組みとしてはJavaScriptのProxyを使っているとのことです。そして、postMessageを使ってHTML側とデータを送受信しています。また、速度的に大きなメリットはなく、通常のDOM操作が30〜40msなのに対して、Via.jsは処理全体で70〜90msかかってしまうようです。現状、大きな問題としてメモリリークが発生しているらしく、その点において本番環境での利用はお勧めしないとしています。とはいえ、技術的には非常に面白いソフトウェアでしょう。

Via.jsはJavaScript製のソフトウェア(ソースコードは公開されていますがライセンスは明記されていません)です。

Via.js demo

AshleyScirra/via.js: Use the DOM in a Web Worker.

MOONGIFTプレミアムに登録して運営をサポートしてください!月額500円の他、半年(3,000円)、年間パック(6,000円)もあります。企業向けに3アカウント以上で請求書払いも可能です(年間一括のみ)。従業員の方向けのサービスにいかがですか? プレミアムユーザのログインはこちらから

 

MOONGIFTの関連記事

コメント

  • DevRel
  • Com2