我有一个简单的应用程序,它从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调用总数。我已尝试提高每次调用的限制以获取更大的块,但它似乎没有产生巨大的差异。
感谢。
答案 0 :(得分:0)
所以,你猜这是用JS SDK做的,这意味着它在浏览器中运行...你是否尝试在Chrome中运行它,然后观看网络监视器以查看响应时间等?
有100个请求,这也意味着数据对象/ JSON的大小必须大约为2.5mb,这对某些浏览器/机器来说可能非常具有挑战性。此外,从FB获取数据还需要一段时间。用户在此期间看到了什么?
您是否考虑在服务器端的后端实现此功能,然后将结果传递给前端?
例如,使用NodeJS和SocketIO在服务器端执行此操作并动态更新字数?