0

「長い」応答の 1 つが何らかの方法で別の AJAX 要求をブロックすると、不快な状況になります。3 つの異なるリソースを同時に呼び出します。

var list = ['/api/filters','/api/criteria/brands','/api/criteria/genders']  
list.forEach(function(item){$.post(item)})

サーバー側では、ログファイルで次の時間を確認できました。

GET /api/filters 304 51ms
GET /api/criteria/genders 200 1ms
GET /api/criteria/brands 200 0ms

それは私にはクールに見えますが、ブラウザでは画像がまったく異なります.

Google Chrome のネットワーク タブが表示された画像

したがって、ブラウザは最初の応答 (長いリクエスト) を待ってから、最後の 2 つの結果を受け取るように見えます。

この動作の理由は何ですか?

4

2 に答える 2

0

すべてのブラウザは、一度に特定の量の同時リクエストを処理するだけです。10個のajaxリクエストを同時に起動すると、ブラウザはそれらをスタックに配置し、次々に処理します。

この質問のbrowsernで、同時リクエストに関する詳細情報(画像、JavaScriptなども含まれているため)を見つけることができます。

于 2013-01-23T09:20:02.237 に答える
0

ノード サーバーの実行はシングル スレッドであり、CPU サイクルを使用するコードはプロセス全体をブロックします。

その結果、GET /api/filters多くの CPU 集中型の計算を行うと、完了するまで他の要求がブロックされます。それが実際に何をするかについてさらに情報を追加すると、より良い答えをまとめるのに役立ちます。

そこにIO操作がある場合は、それらを非同期にしてみてください。これにより、最初の URL が IO を実行している間にノードが他の URL を提供できるようになります。

于 2013-01-23T12:05:06.960 に答える