我正在编写一个网络应用程序,它允许用户从他们的 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秒!但为什么?