2016-05-24 10 views
-1

同じサーバーにコールバックするときは、複数の並列要求に対して、どちらの時点で大きなコールを行うのがよいでしょうか。Javascript複数のコールまたは1つの大きなコール

私の特別なケースでは、サーバの処理時間(リクエスト処理などを含まない)は線形です(例えば、3ビットのデータを要求する1ビッグコールは3コールの場合と同じ処理時間を要します)。

1000コールがある場合は、すべてのネットワークオーバーヘッドが発生しないようにバッチ処理する方がよいことがわかります。しかし、私は2つだけ持っている場合、私は並列要求がおそらくより良いと仮定しています。

これは正しいですか?
もしそうなら、カットオフはどこですか?

+0

を説明したシナリオではHTTP/1 *とに実行されます同じパフォーマンスの問題のいくつかをカバー非常に似たような行動をするためにサーバーを4000回釘付けするアイデア。あなたは一度それをヒットし、あなたの結果を得て、戻り値のデータを解析する必要があります。 – durbnpoisn

+0

カットオフは2です。一度に2つはあまりにも多いです。 –

+0

要求と応答の性質によって異なります。データが本質的に関連している場合は、1回の呼び出しで実行する必要がありますが、1回の呼び出しでアプリケーションデータを取得し、もう1回の呼び出しで広告データを取得する(これはユーザーが望むサブジェクトとはまったく無関係です) 。また、サーバーがスパムを防ぐためにサーバーに狂ったヒットをするクライアントを拒否することも確信しています。 – Will

答えて

1

TL; DR:多くの要因によって、設定に大きく左右されます。パフォーマンスがあなたの大きな懸念事項である場合は、Wiresharkのようなサードパーティ製のアプリケーションでテストを実行するか、サーバーにパフォーマンステストコードを書きます。しかし、一般的には、パラレルリクエストの量を可能な限り少数に制限し、それらを連結します。


一般的に、いくつかのリクエスト(並行して)は問題ありません。最新のブラウザは、TCPストリーム上で可能な限り並列に実行しようとします。

HTTP/1. *プロトコルを使用してサーバーで行う場合、のすべてのリクエストには、参照元とブラウザのようなものが含まれているため、膨大なヘッダーが付いてくるため、クッキー。要求本体は1文字でも構いませんが、要求自体はもっと大きくなります。

さらに、新しい転送プロトコルであるHTTP/2(またはSPDY)でシナリオが変更されます。ここでは、通常の要求が行うすべてのヘッダーメタデータの余分な重みを運ぶとは限りません。したがって、サーバーとブラウザーがHTTP/2をサポートしている場合、より多くの要求を並行して実行できる可能性があります。

ほとんどの場合、HTTP/1. *を使用して実行されます。つまり、並列処理された2つ以上のリクエストが、サーバー処理時間について記述したシナリオでは、 1つの大きな負荷を超える完全な完了時間。

また、アプリケーションに依存するもう1つのことが考えられます。そのデータはいつ重要なのですか? 1つの大きなリクエストに大量の小さなリクエストが含まれていたとすると、サーバー側で操作が完了するまで戻りデータは返されません。データをより迅速に表示する必要がある場合や、低速のネットワーク状況で段階的に作業をロードする場合は、複数の小規模な要求に対してパフォーマンスのトレードオフがそれに見合うかもしれません。

この説明は役立ちます。

は間違いなくFAQ for HTTP/2をよく読んで:彼らはまた、私はそれは良いことだシナリオを想像することはできませんあなたが

関連する問題