Facebook API 批处理请求非常慢



我正在编写一个网络应用程序,允许用户从他们的Facebook个人资料以及他们的朋友(他们也授权该应用程序)中搜索数据。最初,我循环遍历好友并进行单独的 API 调用以获取好友数据,但这非常慢。因此,我转而构建一系列 API 请求并提交一个批处理请求。

批处理请求应该是我问题的解决方案,但它仍然非常缓慢。我的页面加载时间约为 15 秒,我不知道为什么。文档声称批处理中的每个请求都是并行处理的,但看起来肯定不是这样。我的每个批处理请求都采用唯一的访问令牌是否相关?文档没有指出这是一个问题,但文档没有说很多事情......

下面是我的一个批处理查询的示例:

[
{"method":"GET",
"relative_url":"/#####/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"/#####/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"/#####/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"}
]

只是为了给你一些上下文,该应用程序发出一个API请求来获取用户的朋友。然后,它循环浏览这些结果,为每个朋友(已授权应用程序)构建一个批处理请求,并使用 PHP SDK 发送第二个 API 批处理请求($json_batch 是如上所示的批处理请求):

$rawdata = $facebook->api('?batch='.$json_batch, 'POST');

(如上文例证)。检查累积结果是否与用户的搜索查询匹配,并回显给用户。 任何想法为什么这应该需要 20 秒才能发生?

更新:我添加了一些代码来跟踪脚本执行过程中不同时间的时间......整个课程在 11-13 秒内运行。第一次 FB api 调用(对图形)需要 0.6 秒。第二次批量调用是 10-11 秒!但是为什么?

我不确定为什么批处理请求需要那么长时间,但是要回答每个请求的访问令牌,不,必须这样做,除非您放置不同的令牌,如果您使用相同的令牌,那么您可以简单地(如文档中所示):

curl 
    -F 'access_token=…' 
    -F 'batch=[ 
            {"method": "GET", "relative_url": "me"}, 
            {"method": "GET", "relative_url": "me/friends?limit=50"} 
        ]'
    https://graph.facebook.com

但是,可以使用单个 FQL 查询获取相同的确切信息:

SELECT uid, username, name, first_name, middle_name, last_name, work, education 
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

这也消除了首先单独查询登录用户的好友的需要,但是如果您确实有好友 ID 列表,则可以将它们放在 IN 子句中,而不是内部查询中。
也许这个 fql 解决方案会更快地返回。

最新更新