2

我在单个函数中有 4-5 个 fql 查询。他们每个人都需要 2-4 秒来执行。执行整个功能总共需要 14-15 秒。用户需要等待很长时间。所以我想减少处理时间。(PHP 中没有很好地支持多线程概念。)

我听说过图形 api 中的批处理请求概念。而且我用谷歌搜索了很多,但不明白如何在图形 api 中使用批处理请求进行 fql 查询。

  • 任何人都可以举例说明使用 fql 查询的批量请求吗?
  • 到什么时候查询处理时间会减少?
  • 还有其他方法可以减少许多 fql 查询的时间吗?
4

3 回答 3

7

更新:

https://graph.facebook.com/?batch=[{"method":"GET","relative_url":"me"},{"method":"GET","relative_url":"me/friends?limit=50"}]&access_token=ACCESS_TOKEN&method=post

更多信息在这里:http: //developers.facebook.com/blog/post/2011/03/17/batch-requests-in-graph-api/

于 2012-03-09T10:52:09.743 回答
4

//$current_user=facebook id

 $query1="SELECT uid, name FROM user WHERE is_app_user=1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user)";
 $query2="SELECT uid, name, work_history FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user )";
 $query3="SELECT uid, name, work, education FROM user WHERE uid = $current_user";
 $queries = array(
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query1)),
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query2)),
           array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query3))
            );

            $objs = $facebook->api('/?batch='.json_encode($queries), 'POST');

$objs 获取 thre 查询的整个结果的 json 数组。

而且节省了很多时间。这 3 个查询单独总共需要 9 秒。使用多查询需要 7 秒。批处理请求需要 3.6 秒。

于 2012-03-09T14:00:05.917 回答
2

与其分别调用每个 FQL 查询,为什么不使用 FQL Multiquery?

http://developers.facebook.com/docs/reference/rest/fql.multiquery/

更新 否则,如果您不想使用多查询,我认为您正在寻找的是here。我找不到更多关于 FQL 和 Batch 的信息。

curl \
     -F 'access_token=…' \
     -F 'batch=[{ "method": "POST", \
    "relative_url": "method/fql.query?query=select+name+from+user+where+uid=4", \
     }]
https://graph.facebook.com
于 2012-03-09T10:15:04.257 回答