我有一个有帖子的网站,我正在对他们实施Facebook评论。所有帖子都在一个页面中,每个帖子下面都有一个“评论(3)”链接。一旦点击它,它将转到这篇文章的评论页面,显示Facebook插件。
我的问题是从'comments(3)'中获取3这需要一段时间...我该如何优化它?这就是评论所在的页面:https://graph.facebook.com/?ids=http://example.com/
在我收到评论的页面上,这就是我对每篇文章所拥有的内容:
echo $postsClass->getCommentsCount($post['id'])
然后这就是getCommentsCount函数的样子:
public function getCommentsCount($postId) {
$commentsCount = 0;
$url = 'http://myurl.com?post=' . $postId;
$html = file_get_contents('http://graph.facebook.com/?ids=' . $url);
$comments = json_decode($html, true);
if (array_key_exists('comments', $comments[$url])) {
$commentsCount = $comments[$url]['comments'];
}
return $commentsCount;
}
加载6条帖子的评论似乎需要3到4秒左右...有关如何改进这一点的任何想法?
谢谢!
答案 0 :(得分:4)
Facebook Graph API通过订阅系统支持Real-time Updates。
我不确定更改通知交付是否有延迟;但是,它可以保证更高效。 收到更新后,只需将结果缓存到数据库中即可快速检索。 请注意,如果您订阅许多快速变化的物体,它可能会非常沉重。
另一种方法是安排服务器每隔几分钟(每隔几分钟?)轮询一次评论并存储信息。
或者,您可以展示该页面,然后让用户的浏览器通过AJAX查询评论计数。用户可以通过您的服务器检索信息,或者如果他们可以访问上下文中的对象,则直接从Facebook检索信息。
答案 1 :(得分:1)
我今天急于求成,所以不能给你更详细的答案,但你应该尝试做一个批量请求http://developers.facebook.com/docs/reference/api/batch/
Graph API的标准版本旨在实现真正的目标 轻松获取单个对象的数据并浏览连接 对象之间。它还包括有限的检索数据的能力 同时为几个对象。
如果您的应用程序需要能够访问大量的 单个数据中的数据 - 或者您需要更改多个对象 同时,通常更有效地批量查询而不是 制作多个单独的HTTP请求。
要启用此功能,Graph API支持批处理。批量允许你 在单个HTTP请求中传递多个操作的指令。您 还可以指定相关操作之间的依赖关系(如 以下部分)。 Facebook将处理您的每个独立 并行操作并处理您的相关操作 顺序。一旦所有操作完成,就合并完成 响应将传递给您,HTTP连接将是 闭合。
答案 2 :(得分:1)
您可以使用Facebook comments count plugin:
Comments(<fb:comments-count href=http://example.com/></fb:comments-count>)
答案 3 :(得分:0)
为了扩展@Jont的答案,让我举一个如何进行批量请求的例子。
假设我们有一个用户ID列表,我们想要获取这些用户的名称。
$userIds = array('1234', '3456', '5678', '7890');
$queries = array();
foreach ($userIds as $userId) {
$queries[] = array('method' => 'GET', 'relative_url' => '/'.$userId);
}
$batchResponse = $facebook->api('?batch='.json_encode($queries), 'POST');
foreach ($batchResponse as $response) {
$user = json_decode($response['body'], true);
$users[$user['id']] = $user;
}
这将仅使用一个http请求获取所有用户。
通常,预先获取数据并将其存储在本地是一个好主意,因为您不希望在每次请求时向图API API发出请求。
答案 4 :(得分:0)
FQL怎么样?它仅限于我认为5000个对象,但这应该足够了,它可以让你精确地确定你想要检索的内容,这可能会更快。