0

介绍

我正在尝试运行一种登录 facebook 的方法。登录成功回调请求当前用户的id,他们的事件,他们的朋友列表,然后遍历朋友列表,为他们的每个朋友请求事件,并将每个朋友的事件列表与当前用户的事件进行比较。

我运行这个作为许多单独的请求的原因是,分解它似乎更有效,所以我不会一次获得如此巨大的数据块并阻塞我的应用程序。现在我不太确定。

问题

我想就是否应该只发出一个大的 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 请求都是昂贵的并且是最薄弱的故障点(考虑具有波动网络连接的移动环境),所以如果可以的话,只需在一个请求中完成所有操作。它还使您的代码更易于维护,因为它避免了回调链接。

除非您收到数兆字节的响应,否则这不会影响性能。如果您发现解析响应确实需要时间,您可以使用 Web Worker;这会将解析任务移至后台,释放主线程,以便您可以在处理时显示反馈。

于 2013-11-09T13:41:15.410 回答