1

簡単な背景を説明しますので、ご容赦ください。

  1. 私のアプリケーションは、Facebook と LinkeIn からユーザー データを取得します。
  2. どちらも非常に厳しい使用条件があります。具体的には、彼らは私のアプリケーションにユーザーデータを保存することを許可していません(Facebook はキャッシュを許可していますが、Linked はキャッシュさえ許可していません)。
  3. 単純な解決策は、Facebook/LinkedIn からのデータが必要なときにいつでも呼び出すことです。問題は、大量のデータ (100 人のユーザーのプロファイルなど) が必要な場合、これが非常に遅くなることです。バッチ呼び出しは物事を改善しますが、限界があり、このアプローチが拡張できるかどうかはわかりません。

問題は、Facebook/LinkedIn からのデータを使用しながらアプリケーションを高速に実行するにはどうすればよいかということです。

あなたの経験から共有できるか、Facebook/LinkedIn からの大量のデータを使用するサイトの例を教えていただければ幸いです。

4

2 に答える 2

3

アプリケーションを「高速」にすることについて話すときは、「高速」は「高スループット」または「低遅延」のいずれかを意味することに注意してください。この 2 つには大きな違いがあります。レイテンシー (個々のユーザーにサービスを提供する速度) とスループット (単位時間あたりにサービスを提供できるユーザー数) の両方のパフォーマンス目標を設定することをお勧めします。

FB/LinkedIn からのデータ取得がスループットのボトルネックである場合、

  1. バッチ リクエストを使用します。
  2. 同じデータを繰り返し使用できる場合は、できるだけ多くのデータをできるだけ長くキャッシュします。
  3. アプリケーションが多くのリクエストを並行して発行できることを確認してください。ネットワーク経由でクエリを送信するのは待機時間の長い操作であるため、この方法で大量のスループットを得ることができます。

FB/LinkedIn からのデータ取得がレイテンシーのボトルネックである場合、

  1. ここでも、できるだけ多くのデータをローカルにキャッシュします。
  2. どのデータがすぐに必要になるかを「推測」できる場合は、そのデータをプリフェッチします。(たとえば、ユーザーが大きなフォームに記入して送信する必要があるが、そのフォームに必要なデータを識別する重要なフィールドがある場合、AJAX を使用して、ページがそのフィールドをすぐに送り返すようにすることができます。フォーム全体が送信されるのを待つのではなく、入力されます!)
  3. 1 人のユーザーにサービスを提供するために複数のデータが必要な場合は、複数の連続した要求でそれらを取得しないでください。バッチ処理された要求または複数の並列要求 (おそらく両方) を使用してください。
  4. ユーザーを待たせる必要がある場合は、ユーザーの「注意をそらして」ください。待ち時間が短く見えるようにできる限りのことをしてください。
  5. FB/LinkedIn データなしでレンダリングできるページの特定の部分がある場合は、最初にそれらの部分を送り返し、データの準備ができたら AJAX 呼び出しを使用して他の部分を埋めます。

ユーザーにサービスを提供するために FB/LinkedIn からのデータ XYZ が絶対に必要であり、単一の API リクエストの待ち時間が N 秒であり、各ユーザーにサービスを提供する目標最大時間が N 秒未満である場合、目標は、データをプリフェッチすることです。おそらく、最初のページ要求がユーザー (たとえば、ホームページ) に送信されるのを確認したときに、そのユーザーに必要なすべてのデータをキャッシュにロードし始めることができます (キャッシュがまだ存在しない場合)。

何をするにしても、FB/LinkedIn データ アクセス コードを「データ アクセス レイヤー」内にカプセル化することをお勧めします。キャッシュは厳密にデータ アクセス レイヤーで行われる必要があります。アプリケーション コードはキャッシュについて知る必要はありません。バッチ呼び出しを使用するかどうか、および複数の呼び出しを並行して発行するかどうかも実装の詳細であり、データ アクセス レイヤー内に厳密に保持する必要があります。

于 2012-08-14T10:36:50.710 に答える
3

具体的には、彼らは私のアプリケーションにユーザーデータを保存することを許可していません (Facebook はキャッシュを許可しています。Linked はキャッシュさえ許可していません)。

それは真実ではありません… http://developer.linkedin.com/documents/linkedin-apis-terms-use :

B. 許可された場合にのみコンテンツを保存する、3. パフォーマンスのためにキャッシュする:

メンバーのエクスペリエンスを向上させるために、LinkedIn コンテンツをキャッシュすることはできますが、元のリクエストから 24 時間以上キャッシュしてはなりません。キャッシュへのこの限定された許可は、パフォーマンス上の理由からのみです。

于 2012-08-14T10:20:03.153 に答える