0

はじめに

Facebookにログインするメソッドを実行しようとしています。ログインの成功のコールバックは、現在のユーザーの ID、イベント、フレンド リストを要求し、フレンド リストを実行して各フレンドのイベントを要求し、各フレンドのイベント リストを現在のユーザーのイベントと比較します。

これを多くの個別のリクエストとして実行する理由は、一度に大量のデータを取得してアプリを詰まらせないように、分割する方が効率的だと思われるからです。今はよくわかりません。

問題

すべてのデータを取得するために 1 つの大きな ajax リクエストを行うべきか、それとも小さな呼び出しに分割するべきかについて、アドバイスが欲しいです。

また、それをより小さな通話に分割する必要がある場合、最善の方法についてアドバイスをいただけますか? たとえば、それらすべてをコールバックとして相互にチェーンする必要がありますか?

1. ユーザーの ID を取得する

  1. ユーザーのイベント リストを取得し、ユーザーのフレンド リストを取得することは、独立して実行でき、連鎖する必要はありません。

  2. ユーザーの友達リストを取得します (ステップ 2 へのコールバックとして - イベント リストと友達リストを受信した後)

  3. フレンドごとにユーザーのイベントとフレンドのイベントを実行します (ステップ 3 へのコールバックとして)。

(怪しげなフォーマットについては申し訳ありません - 私はコードのフォーマットと格闘しようとしましたが、何らかの理由で、今日はうまくいきませんでした:()

function collectFriendsRankedByCommonEvents(){

  var myId;
  var eventComparisonData = [];
  var myData;
  var myFriendsList;

  //login with permission to userEvents, Friendslist and friend's events
  FB.login(function(response){
                if(response.status == 'connected'){
                    FB.api('/me', function(response) {   myId = response['id']   });
                    FB.api((myId + '?fields=id,events'), 'GET', function(response){ myData = response   })
                    FB.api((myId + '?fields=id,friends'), 'GET', function(response){    myFriendsList = response    })
                    for(i=0; i < myFriendsList.length; i++){
                      var thisFriendId = myFriendsList[i]
                      var thisFriendData; //call to API to request friend's event data
                      var comparisonWithThisFriend = compareFriendEventsWithMe(myData, thisFriendData);
                    }
                    eventComparisonData.push(comparisonWithThisFriend);
                } else {    console.log('couldn\'t connect to facebook')    }
                 }, 
                  {scope: 'user_friends, friends_events'}
      );

  //to iterative rendering method

}
4

1 に答える 1

1

ほとんどの場合、できるだけ少ない HTTP リクエストを実行するのが最善です。どのアプリでも、HTTP リクエストは高価であり、障害の最も弱い点です (ネットワーク接続が変動するモバイル環境を考慮してください)。可能な場合は、1 つのリクエストですべてを実行してください。また、コールバック チェーンが回避されるため、コードの保守が容易になります。

数メガバイトの応答を受信して​​いない限り、これがパフォーマンスに影響を与えることはありません。応答の解析に時間かかる場合は、Web Worker を使用できます。これにより、解析タスクがバックグラウンドに移動し、メイン スレッドが解放されるため、処理中にフィードバックを表示できます。

于 2013-11-09T13:41:15.410 に答える