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秒到几分钟。

为什么它非常慢?这个请求有什么问题吗?

4

3 回答 3

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

于 2012-07-16T20:24:48.927 回答
1

它之所以更慢,仅仅是因为要收集更多数据。2000 多个朋友对于一个查询来说是相当多的......

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

除了平台的实时状态(确实有用知道),还有两个图表显示平均 API 响应时间和 API 错误计数。如果您注意到请求极其缓慢,请转到该链接以查看这是否是系统范围的问题。

于 2012-07-16T07:17:42.387 回答
0

在我看来,FQL 很好,但应该在常规图形 API 无法满足您的要求时使用。在给定的情况下,如果唯一的要求是获取朋友的 ID,那么您可以简单地使用以下代码。

FB.api("me/friends?fields=id&limit=3000", function(resp){//process data});
于 2012-07-16T08:10:00.853 回答