php
  • facebook
  • facebook-graph-api
  • 2012-07-16 69 views 5 likes 
    5
    $access_token = $facebook->getAccessToken(); 
    $query = "SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me())"; 
    $query = urlencode($query); 
    $fql_query_url = 'https://graph.facebook.com/'. 'fql?q='.$query. '&access_token=' . $access_token; 
    $fql_query_result = file_get_contents($fql_query_url); 
    $fql_query_obj = json_decode($fql_query_result, true); 
    

    這是查詢。它讓我工作得更快,因爲我的朋友有限。但是一些應用用戶表示,如果他們擁有大約2000多個朋友,他們的速度非常緩慢。他們說,它也花了30秒鐘。Facebook FQL - 很慢

    爲什麼它很慢?這個要求有什麼不對嗎?

    +0

    如果您嘗試執行2000多個朋友的查詢並查看自己,該怎麼辦?大家都說謊 – zerkms 2012-07-16 07:14:50

    +0

    只是我試過後發佈在這裏:)它很慢。我檢查了不同級別腳本的執行時間。 Facebook需要很長時間才能獲取數據?服務器的網絡或捲曲可能會變慢嗎?如何檢查在taht情況下? – Kamini 2012-07-16 07:17:55

    +1

    'SELECT uid FROM user WHERE uid IN(...)' - 這部分沒有意義。整個查詢可以簡化爲'SELECT uid2 FROM friend WHERE uid1 = me()' – zerkms 2012-07-16 07:20:02

    回答

    4

    好了,第一件事情 - 只要你通過uid過濾用戶只有選擇後uid - 外部查詢看起來是多餘的。所以最終的查詢可以減少到

    SELECT uid2 FROM friend WHERE uid1=me() 
    

    第二件事:它是更方便使用FB PHP SDK位執行FQL查詢,不file_get_contents,如:

    $facebook->api("/fql?q={$fql}"); 
    

    (摘自https://stackoverflow.com/a/7827550/251311

    1

    只是因爲要收集更多數據而變慢。 2000多個朋友對於單個查詢是相當多的...

    一些有用的信息可以在這裏找到 - https://developers.facebook.com/live_status

    除平臺的實時狀態(確實有用)之外,還有兩個圖表顯示平均API響應時間和API錯誤計數。如果您注意到速度極慢的請求,請轉到該鏈接,查看是否可能是系統問題。

    0

    在我看來,FQL很好,但應該在常規圖形API無法滿足您的要求時使用。在特定情況下,如果唯一的要求是獲取朋友的ID,那麼您可以簡單地使用以下代碼。

    FB.api("me/friends?fields=id&limit=3000", function(resp){//process data}); 
    
    +0

    是真的嗎?比fql更快嗎? – Kamini 2012-07-16 08:21:36

    +0

    @Kamini:我相信他們的表現非常接近。使用的存儲是相同的,但只有2個不同的接口 – zerkms 2012-07-16 10:26:12

    +0

    根據我對FQL的經驗,您最終可以自行處理。但圖形API可以給你處理的結果。我可能錯了,但這是我對FB API和FQL的體驗。 – 2012-07-16 10:33:06

    相關問題