アプリケーションを「高速」にすることについて話すときは、「高速」は「高スループット」または「低遅延」のいずれかを意味することに注意してください。この 2 つには大きな違いがあります。レイテンシー (個々のユーザーにサービスを提供する速度) とスループット (単位時間あたりにサービスを提供できるユーザー数) の両方のパフォーマンス目標を設定することをお勧めします。
FB/LinkedIn からのデータ取得がスループットのボトルネックである場合、
- バッチ リクエストを使用します。
- 同じデータを繰り返し使用できる場合は、できるだけ多くのデータをできるだけ長くキャッシュします。
- アプリケーションが多くのリクエストを並行して発行できることを確認してください。ネットワーク経由でクエリを送信するのは待機時間の長い操作であるため、この方法で大量のスループットを得ることができます。
FB/LinkedIn からのデータ取得がレイテンシーのボトルネックである場合、
- ここでも、できるだけ多くのデータをローカルにキャッシュします。
- どのデータがすぐに必要になるかを「推測」できる場合は、そのデータをプリフェッチします。(たとえば、ユーザーが大きなフォームに記入して送信する必要があるが、そのフォームに必要なデータを識別する重要なフィールドがある場合、AJAX を使用して、ページがそのフィールドをすぐに送り返すようにすることができます。フォーム全体が送信されるのを待つのではなく、入力されます!)
- 1 人のユーザーにサービスを提供するために複数のデータが必要な場合は、複数の連続した要求でそれらを取得しないでください。バッチ処理された要求または複数の並列要求 (おそらく両方) を使用してください。
- ユーザーを待たせる必要がある場合は、ユーザーの「注意をそらして」ください。待ち時間が短く見えるようにできる限りのことをしてください。
- FB/LinkedIn データなしでレンダリングできるページの特定の部分がある場合は、最初にそれらの部分を送り返し、データの準備ができたら AJAX 呼び出しを使用して他の部分を埋めます。
ユーザーにサービスを提供するために FB/LinkedIn からのデータ XYZ が絶対に必要であり、単一の API リクエストの待ち時間が N 秒であり、各ユーザーにサービスを提供する目標最大時間が N 秒未満である場合、目標は、データをプリフェッチすることです。おそらく、最初のページ要求がユーザー (たとえば、ホームページ) に送信されるのを確認したときに、そのユーザーに必要なすべてのデータをキャッシュにロードし始めることができます (キャッシュがまだ存在しない場合)。
何をするにしても、FB/LinkedIn データ アクセス コードを「データ アクセス レイヤー」内にカプセル化することをお勧めします。キャッシュは厳密にデータ アクセス レイヤー内で行われる必要があります。アプリケーション コードはキャッシュについて知る必要はありません。バッチ呼び出しを使用するかどうか、および複数の呼び出しを並行して発行するかどうかも実装の詳細であり、データ アクセス レイヤー内に厳密に保持する必要があります。