2011-05-01 91 views
3

我想使用node.js来提升我的Facebook应用程序性能。想象一下,应用程序试图计算Facebook上的谁是你最好的朋友,从API调用中获取大量数据 - 确定你的朋友发布到墙上的次数,已经标记了多少张照片等等。使用node.js可以做非阻塞的Facebook API调用吗?

因此,我不是一个接一个地运行调用,因为我使用PHP,我有一个想法,使用Node.js的非阻塞异步本质将它们一起发送到Facebook。

因此总的执行时间将是最耗时的API调用的时间,但不是每次调用的执行时间的总和,对吗?

我尝试使用node-facebook-sdk(https://github.com/tenorviol/node-facebook-sdk)进行Facebook API调用,它似乎是它阻塞了,不是吗?

对示例代码进行快速而脏的修改,请求3个用户配置文件,似乎调用不是异步的,每次发送到Facebook之后都会先前完成。有什么办法可以避免这种情况?

提前致谢!

var fbsdk = require('facebook-sdk'); 

var facebook = new fbsdk.Facebook({ 
    appId : '_APPID_', 
    secret : '_SECRET_' 
}); 

var i = 0; 

setInterval(function() { 
    i++; 
    console.log("TICK " + i); 
}, 500); 

facebook.api('/100000997949108', function(data) { 
    console.log(data); 
}); 

facebook.api('/1609464095', function(data) { 
    console.log(data); 
}); 

facebook.api('/100000560820400', function(data) { 
    console.log(data); 
}); 
+6

望着那确实应该是异步的,因为它使用'http.request'下方的fbsdk源。由于某种锁定机制,您可能在facebook上遇到问题,不允许您并行执行多项操作。 – Raynos 2011-05-01 07:46:16

+2

你见过这个https://developers.facebook.com/docs/api/batch/,我认为这是一个选择。 – DannyKK 2011-05-01 10:06:22

+0

为了获得更好的性能,我总是试图在客户端浏览器中尽可能多地处理Facebook请求,然后在必要时将结果发送到服务器... – dwarfy 2011-05-01 11:25:28

回答

0

这个库将帮助你与异步的所有东西。我摒弃了您希望用于解决问题的特定方法,但整个库在抽象一些更乏味(和丑陋)的异步模式方面非常出色。对于那些来自程序的人来说,这是一个很好的过渡工具,如果你想学习一些异步模式,你可以在封面下找到一个高峰。

https://github.com/caolan/async/#parallel