加速制作许多Facebook API调用的应用程序

时间:2014-01-23 23:42:23

标签: javascript facebook facebook-graph-api memory-management recursion

我有一个简单的应用程序,它从Facebook API获取用户的完整提要,以计算他或她在网站上写的总数。

在他或她进行身份验证后,该页面会对/me/feed?limit100进行图表调用,并计算回复数量及其日期。如果响应中有“下一个”光标,则会ping下一个URL,如下所示:

https://graph.facebook.com/[UID]/feed?limit=100&until=1386553333

等等,递归地,直到我们到达用户加入Facebook的时间。该函数如下所示:

var words = 0;

var posts = function(callback, url) { 
    url = url || '/me/posts?limit=100';

    FB.api(url, function(response) {
        if (response.data) {
            response.data.forEach(function(status) {
                if (status.message) {
                    words += status.message.split(/ /g).length;
                }
            });
        }

        if (response.paging && response.paging.next) {
            posts(callback, response.paging.next);
        } else {
            alert("You wrote " + words + " on Facebook!");
        }
    });
}

这适用于拥有最多4,000个状态的帖子的用户,但它真正开始为拥有10,000次或更多生命周期更新的高级用户抓取。 API的每个响应只有大约25Kb,但我无法弄清楚最紧张的是什么。

在我将每个状态中的单词数添加到我的总字数之后,我是否需要专门销毁响应对象以免过载内存?

或者,递归深度是一个问题吗?我们实际上是在谈论针对高级用户的API调用总数。我已尝试提高每次调用的限制以获取更大的块,但它似乎没有产生巨大的差异。

感谢。

1 个答案:

答案 0 :(得分:0)

所以,你猜这是用JS SDK做的,这意味着它在浏览器中运行...你是否尝试在Chrome中运行它,然后观看网络监视器以查看响应时间等?

有100个请求,这也意味着数据对象/ JSON的大小必须大约为2.5mb,这对某些浏览器/机器来说可能非常具有挑战性。此外,从FB获取数据还需要一段时间。用户在此期间看到了什么?

您是否考虑在服务器端的后端实现此功能,然后将结果传递给前端?

例如,使用NodeJS和SocketIO在服务器端执行此操作并动态更新字数?