[解決済み] JavaScriptはAJAXレスポンスをバックグラウンドでどのように処理するのですか?
質問
JavaScriptはシングルスレッドで実行されるので、AJAXリクエストが行われた後、バックグラウンドで実際に何が起こっているのでしょうか?私はこれについてより深い洞察を得たいと思いますが、どなたか光を当てていただけないでしょうか。
どのように解決するのですか?
カバーの下に、javascriptにはイベントキューがあります。 javascript のスレッドの実行が終了するたびに、処理する別のイベントがキューにあるかどうかを確認します。 もしあれば、キューからそれを取り出し、そのイベントをトリガーします (たとえば、マウスのクリックなど)。
ajax呼び出しの下にあるネイティブコードのネットワークは、ajax応答が完了したとき、イベントがjavascriptのイベントキューに追加されることを知ります。 ネイティブ コードが ajax 呼び出しが完了したときを知る方法は、実装に依存します。 スレッドで実装することもできますし、イベント駆動型にすることもできます(それは本当に重要ではありません)。 実装のポイントは、ajaxレスポンスが完了したとき、いくつかのネイティブコードはそれが完了したことを知り、JSキューにイベントを置くということです。
その時にJavascriptが実行されていない場合、イベントは直ちにトリガーされ、ajaxレスポンスハンドラが実行されます。 その時点で何かが実行されている場合、イベントは、実行中のJavaScriptのスレッドが終了したときに処理されます。 javascriptエンジンによるポーリングは必要ありません。 あるJavascriptの実行が終了すると、JSエンジンはイベントキューをチェックして、他に実行する必要があるものがないかどうかを確認するだけです。 もしあれば、キューから次のイベントを取り出し、それを実行します(そのイベントに対して登録された一つまたは複数のコールバック関数を呼び出します)。 イベント キューに何もない場合、JS インタプリタには、外部のエージェントがイベント キューに何か他のものを入れて再び起動するまで、空き時間 (ガベージ コレクションまたはアイドル) があります。
すべての外部イベントはイベントキューを通過し、javascriptが実際に何かを実行している間にイベントがトリガーされることはないため、シングルスレッドに保たれます。
詳細については、以下の記事を参照してください。
関連
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jQueryのコピーオブジェクトの説明
-
vue ディレクティブ v-html と v-text
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】gulp anythingを実行するたびに、アサーションエラーが発生します。- タスク関数を指定する必要があります
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules