複数のHTTPリクエストをマージして帯域幅を節約することをお勧めしますか?


16

低速のモバイル接続で時々使用される単一ページのアプリケーションを準備しています。その一部は、APIリクエストの点でかなり重い(新しい画面表示のために10個の異なるリソースをフェッチする)。

さて、これらのサービスを、必要なすべてのデータを提供するサービスにマージするのは良い考えですが、RESTの原則に関しては「純粋」ではありませんか?予想される大幅なパフォーマンスの向上はありますか?


3
「良いアイデア」は、ソフトウェアのパフォーマンスと保守性の要件を適切に満たすものです。
ロバートハーヴェイ14

1
応答を組み合わせる利点は実際にはそれほど重要ではないかもしれませんが、一度キープアライブを使用し、並行してロードできる要求が互いにブロックされることなくロードされるようにすることを保証します。測定、測定、測定。推測しないでください。
ライライアン14

それを行うと、帯域幅が節約されるだけでなく、IO操作を並べ替えることができるため、IOのパフォーマンスが向上します。これは多くの場合、システムのボトルネックになり、スループットを大幅に改善します。
情報14

回答:


18

RESTの利点の1つは、従来のhttpキャッシュを介してリクエストをキャッシュできることです(これらがキャッシュ可能なリクエストであると想定)。

単一の、より大きく、あまり使用されていない、おそらく異なるリクエスト(a,b,c,d今回はアイテムをフェッチし、a,b,d,e次回はアイテムをフェッチします)がある場合、リクエストをキャッシュミスである可能性が高くなり、キャッシュから期限切れになる可能性がありますあなたとソースの間のどこかに座ってください。

上記の2セットのリクエストを考えると、2番目のリクエストは75%のキャッシュヒット率を持ちe、4つすべてではなく、かなり高速にフェッチします。

キャッシュミスリクエストの最初のセットを実行する人はキャッシュミスをまだ持っているので、これを使用している人にはすぐに明らかにならないことに注意してください。

これは、非ローカルキャッシュヒットが発生する可能性が低いモバイルネットワーク接続で理想的だということではありません。ただし、ホットスポットやその他のWi-Fiの状況では、キャッシュヒットの方がはるかに便利です。

繰り返しになりますが、この多くはアプリケーションの動作方法に依存します。起動時にこのすべてのデータを要求していますか?または、応答時間の予想が異なるページ読み込みについて話しているのですか?

理想的なのは、これをテストして、さまざまな状況でアプリケーションがどのように実行されるかを確認することです。モバイルデバイスを監視可能なローカルWi-Fiネットワークにバインドする(Googleでの最初のヒット)状況を設定し、悪いインターネット接続シミュレートして実際の動作を確認する(またはしない)ことを検討してくださいそして、どれが最高のパフォーマンスを発揮します。


1
キャッシングについて言及する場合は+1。リクエストで要求するリソースが多いほど、キャッシュミスの可能性は高くなりますが、HTTPオーバーヘッドは少なくなります。
ブランドン14

8

あなたの直感はある程度正しいです。概して、リクエストを少なくすることは確かに望ましいことです。チャンキーAPIの方が優れている傾向があります。特に、何も頼ることができないため、悪夢のようなフォールバックシナリオの作成に失敗する作業と失敗する作業を見ることができるむらのある接続の場合。

大きな注意点が1つあります-あまりにも大きくなりすぎて、通話と応答が肥大化します。たとえば、データを取得するたびに大きなページを強制的に更新するのではなく、最初にページをヒットしたときに大きな呼び出しを1回行い、更新を小さなバイトでストリームすることが理にかなっている場合があります。

または、多分両方の方法でそれをしたいと思うでしょう。


5

チェックアウトこのDropboxのテックブログの記事を

そこで、すべての写真のサムネイルを取得するために提案したソリューションを正確に実装した理由と方法について詳しく説明します。彼らはパフォーマンスを測定してトラブルに見合う価値があるかどうかを確認する必要があると言わなければなりません。

短い要約:

Dropbox Webサイトでは、数百のサムネイルを読み込む必要があります。一部のブラウザの制限により、すべてのサムネイルが同時にロードされるわけではありません(リクエストはキューに入れられます)。彼らはSPDYを使用したいと考えていましたが、システムの一部がまだサポートしていないため、使用できませんでした。最終的に、彼らはHTTP経由のバッチリクエストを使用しました。これは、応答ごとに圧縮形式で複数のサムネイルを返します。結果によると、全体的なページ読み込み時間の改善は40%でした。


しかし、彼らはそれが一時的な解決策だと言います。
イマジョロス16

3

要するに、あなたのアプローチはいくぶん正しいものであり、ラッパーサービスの恩恵を受ける可能性があります。

このサービスは、既存の単一の呼び出しを1つのサービス側メソッドに結合します。クライアントからサービス側への呼び出しを組み合わせることで、これを実行し、おそらく今までに配置されている可能性のあるすべての単一でアトミックで安らかな呼び出しを利用します。

したがって、リクエストをキャッシュする機能としてRESTの利点を引き続き利用できます。

ただし、エンドポイントでは、サービス/サーバーインフラストラクチャのパフォーマンスと、それを消費するクライアント環境にすべて集約されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.