Firefox 4 最新情報:アドオンのためのスレッドとワーカー

[これは Mozilla Add-ons Blog の記事 Threads and Workers for Add-ons in Firefox 4 の翻訳です]

来る Firefox 4 には、大幅な変更が相当数含まれており、その多くは アドオンに直接影響します。これらの変更の対部分は新しく、これまでと異なる習慣になります。残念ながら、代替手段がなく、アドオン作者の皆さんに対応していただかなければならない変更もいくつかあります。Firefox 4 のスレッドモデルに対して行われた安定性の改善は、そうした例のひとつです。

Thread Manager は Firefox 3 で導入され、最近の Firefox 4 ベータ版までは問題なく動作していました。このオブジェクトは、アドオンが別スレッドで JavaScript コードを実行し、これらのスレッドへオブジェクトを渡したり、その内部の XPCOM オブジェクトへアクセスしたりすることさえも可能にするものでした。

しかし、これがブラウザの安定性に支障を来たし、スレッド間での JavaScript オブジェクトの受け渡しによって Firefox がランダムにクラッシュすることが分かりました。クラッシュの原因が確認されると バグが修正され、その結果、アドオンにとっては取り返しが付かないほど、Thread Manager オブジェクトのレンダリングがまったく使いものにならなくなりました。

これまで多くのアドオンが Thread Manager に依存してきたことから、一部の作者がすぐこの変更に気付き、まもなくその変更に関する議論が始まりました。その後、再度 Thread Manager が JavaScript オブジェクトを受け渡しできるようにする方法はなく、適切な代替手段は ChromeWorker を使うこと、という結論が出ました。

議論の際、ChromeWorker は、js-ctypes を使ってコンパイル済みライブラリに接続できることを除けば、Worker とまったく同じ機能でした。ただ、これはアドオンに十分なものではなかったため、ChromeWorker へ XPCOM を導入する作業が始まりました。

ここまでが現在の状況です。別スレッドでコードを実行したければ、最良の手段は ChromeWorker を使うことです。ドキュメントに書かれている通り、既に XPCOM オブジェクトへのアクセスが可能になっています。ただし、対象はスレッドセーフとしてマークされたコンポーネントに限られます。このため、現時点で利用できるコンポーネントは少なく、スレッドセーフでないコンポーネントを使おうとすると即座に例外が投げられます。

残念ながら、Firefox 4 に投入される機能は、これで実質的に確定となります。筆者 [Jorge Villalobos] は既に、スレッドセーフの XPCOM コンポーネントを増やして ChromeWorker から使えるようにする方法について、プラットフォームチームと話をしています。また、AMO に登録されているアドオンの Thread Manager の使い道について調査を進め、アドオンがこれらのインタフェースをどのように使っているか、理解を深めているところです。ファイルシステムの入出力など、よくある用途については優先的に扱われ、うまくいけば Firefox 4 リリース後のマイナーアップデートに追加されるでしょう。

もしあなたのアドオンがこの変更の影響を受けるようなら、スレッドをどのように使っているか、筆者に教えてください。これは Firefox の今後の開発に影響を与えることですので、ぜひ [英語で 原文の記事 に] コメントを残してください。