0

ご存じのように、ブラウザはシングル スレッドであり、UI をレンダリングするか、Javascript スニペットを実行できます。(webworker を使用してマルチスレッド化することもできますが、デフォルトの動作に固執しましょう)。

私が知りたいのは、jQuery ajax 呼び出しを行うときです。

$.ajax(....)

Javascript スレッドはブロックされません。

1) サーバーにリクエストを送信するとき、ブラウザは何をしますか?

2)サーバーがデータで応答したとき、Javascriptがそのようなイベントをリッスンして、約束が満たされたハンドラーを許可できるようにするブラウザーの実装です。

AsyncTask フレームワークを使用して Android でファイルをダウンロードするための別のスレッドを作成することが推奨されていることに気付いたので、これを尋ねています。Android が Javascript と同じ方法で実装できないのはなぜですか。

4

1 に答える 1

1

まず第一に、それは jQuery ajax 呼び出しではなく、javascript ajax 呼び出しに関連しています。(jQuery に関して)。

ブラウザがサーバーにリクエストを送信すると、ブラウザは何をしますか?

ブラウザはコマンドをキューに追加します。
メイン スレッド (その他の今後の処理の中でも特に) は、キューからのコマンドを 実行します (クォンタムが到着したとき)。

注意
: ブラウザ自体 ( chrome.exe 、 Iexplore.exe )、ajax を処理/実行するためにマルチスレッドを使用します (明らかにマルチスレッドを使用する exe プログラムについて話しています)。

しかし、サーバーからの応答がある場合 (今は同じ古いシングル スレッド ブラウザに戻っています)、それはコールバック キューに追加ます。ブラウザ。

注意: アイテムがキューに追加されたからといって、すぐに自動的に実行されるわけではありません:

この写真はそれを非常によく説明しています:

(関連情報: JS には 2 つの主要な非同期操作があります: setTimeout(または setInterval) 、Ajax)

ここに画像の説明を入力

サーバーがデータで応答したとき、Javascript がそのようなイベントをリッスンして、promise の満たされたハンドラーを可能にするブラウザーの実装です。

Ajax (xmlhttpobject) オブジェクトには、状態に応じて発生するハンドラーがあります。したがって、それは実装自体にあります。繰り返しますが、jQuery とは関係ありません。

また、真のマルチスレッドを可能にするhtml5 サポートWeb ワーカーにも言及する価値があります。

于 2013-10-13T08:17:47.407 に答える