1. ホーム
  2. javascript

[解決済み] JavaScriptはAJAXレスポンスをバックグラウンドでどのように処理するのですか?

2022-05-16 17:12:19

質問

JavaScriptはシングルスレッドで実行されるので、AJAXリクエストが行われた後、バックグラウンドで実際に何が起こっているのでしょうか?私はこれについてより深い洞察を得たいと思いますが、どなたか光を当てていただけないでしょうか。

どのように解決するのですか?

カバーの下に、javascriptにはイベントキューがあります。 javascript のスレッドの実行が終了するたびに、処理する別のイベントがキューにあるかどうかを確認します。 もしあれば、キューからそれを取り出し、そのイベントをトリガーします (たとえば、マウスのクリックなど)。

ajax呼び出しの下にあるネイティブコードのネットワークは、ajax応答が完了したとき、イベントがjavascriptのイベントキューに追加されることを知ります。 ネイティブ コードが ajax 呼び出しが完了したときを知る方法は、実装に依存します。 スレッドで実装することもできますし、イベント駆動型にすることもできます(それは本当に重要ではありません)。 実装のポイントは、ajaxレスポンスが完了したとき、いくつかのネイティブコードはそれが完了したことを知り、JSキューにイベントを置くということです。

その時にJavascriptが実行されていない場合、イベントは直ちにトリガーされ、ajaxレスポンスハンドラが実行されます。 その時点で何かが実行されている場合、イベントは、実行中のJavaScriptのスレッドが終了したときに処理されます。 javascriptエンジンによるポーリングは必要ありません。 あるJavascriptの実行が終了すると、JSエンジンはイベントキューをチェックして、他に実行する必要があるものがないかどうかを確認するだけです。 もしあれば、キューから次のイベントを取り出し、それを実行します(そのイベントに対して登録された一つまたは複数のコールバック関数を呼び出します)。 イベント キューに何もない場合、JS インタプリタには、外部のエージェントがイベント キューに何か他のものを入れて再び起動するまで、空き時間 (ガベージ コレクションまたはアイドル) があります。

すべての外部イベントはイベントキューを通過し、javascriptが実際に何かを実行している間にイベントがトリガーされることはないため、シングルスレッドに保たれます。

詳細については、以下の記事を参照してください。