2011-05-01 92 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