1

これは直接コーディングに関する質問ではありませんが、これに対する回答は Firefox アドオンのコーディングに役立ちます。

  1. すべての JS アドオン コードはメイン スレッドで実行されますか?
  2. 上記の質問が「はい」であると仮定すると、メイン スレッド上の異なる JS ランタイムによってアドオン コードを実行できますか?
  3. #2への答えが「いいえ」であると仮定すると、同じJSランタイム内に複数のJS「実行コンテキスト」がありますか? 「はい」の場合、同じ JS ランタイム内の異なる実行コンテキストでアドオン コードを実行できますか?

上記の質問から外れている可能性がありますが、アドオン コードの一部がハングする奇妙な動作がアドオンに見られます (モーダル ダイアログが起動している場合、ソケット #1 でデータを受信できません)。しかし、他の部分は引き続き動作します (ソケット #2 からデータを読み取ることができます)。私はその行動を説明することができません。

4

1 に答える 1

0

すべての JS アドオン コードはメイン スレッドで実行されますか?

はい。私の知る限り、このルールの唯一の例外は、 Web ワーカーまたはChromeWorkerを介して実行するコードです。Add-on SDK に基づく拡張機能を別のプロセスで実行する計画がありましたが、これがまだ目標であるかどうかはわかりません。

アドオン コードは、メイン スレッド上のさまざまな JS ランタイムによって実行される可能性がありますか?

理論的には - はい。たとえば、拡張機能には、異なる JavaScript エンジンを含むバイナリ XPCOM コンポーネントが付属している可能性があります。または 、JavaScript ベースの JavaScript エンジンに付属するZaphod 拡張機能があります。しかし、それは、通常の SpiderMonkey エンジンで実行されるコードにはあまり関係ありません。

アドオン コードの一部がハングする奇妙な動作がアドオンに見られます (モーダル ダイアログが起動している場合、ソケット #1 でデータを受信できません)。

JavaScript の実行はイベント キューに基づいています。ブラウザーはキューからイベント (DOM イベント、タイムアウト、ネットワーク イベントなど) を取得し、それを処理して、対応する JavaScript コードを実行します。この JavaScript コードが終了するまで、他のイベントは処理できません。

ただし、モーダル ダイアログが開いているときや同期が実行されているときは、JavaScript コードは引き続き実行されませんが、XMLHttpRequestイベントは引き続き処理する必要があります。これは、モーダル ダイアログと、XMLHttpRequestアクティブなときにイベント処理を行うことで解決されます (独自のイベント ループをスピンします)。

ここまで基本。ソケットに着信するデータは通常のイベントであり、メイン イベント ループまたはモーダル ダイアログのループによって処理されているかどうかに関係なく機能するはずです。

于 2012-08-22T09:02:08.033 に答える