mySQL + Facebook FQL查询使我的页面变得非常慢。如何提高性能?

时间:2012-03-26 04:43:44

标签: php mysql performance facebook-graph-api facebook-fql

我有很多粉丝页面,我在Facebook管理,我制作了一个小脚本,让我看看他们有多少粉丝。我已经在mySQL数据库中保存了我想要的页面(page_name + page_id)。
该脚本进行FQL查询并打印每页有多少粉丝。
问题是,当我添加FQL查询时,页面变得有点慢。我想如果我添加其他FQL查询,它的加载速度会非常慢。

我的问题是:有哪些方法可以使用,以便尽快加载我的页面? 我想把风扇和其他数据保存在DB中。但这意味着我不会有实时数字。

谢谢。

$my_pages = mysql_query("SELECT page_name, page_id FROM pages WHERE user = '".$my_id."' ");

while($page_name = mysql_fetch_assoc($my_pages)) { 
    $fan_count = $facebook->api("/fql", array("q" => "SELECT fan_count FROM page WHERE page_id = '".$page_name['page_id']."'"));
      echo $page_name['page_name'].'-'.$fan_count['data'][0]['fan_count'], '<br />';

}

1 个答案:

答案 0 :(得分:1)

从数据库获取所有页面ID,然后向Graph API发出单个调用并迭代结果会更好。

$my_pages = mysql_query("SELECT page_name, page_id FROM pages WHERE user = '{$my_id}';");

$pages = array();
while($page = mysql_fetch_assoc($my_pages)) {
  $pages[] = $page['page_id'];
}
$pagesIds = implode(',', $pages);
$pagesFanCounts = $facebook->api("/fql", array(
  "q" => "SELECT page_id, name, fan_count FROM page WHERE page_id IN ({$pagesIds})"
));

foreach ($pagesFanCounts['data'] as $page){
  echo "{$page['name']} - {$page['fan_count']}", '<br />';
}

顺便说一句,从来没有但永远不会在具有未知迭代次数的循环中调用这样的外部服务,并且肯定不会在与DB打开连接的情况下(这可能会减慢单个用户的结果,但可能会影响其他访客/应用程序用户)!

P.S。
您可以从已删除和过时的FQL性能中读取一些内容(FQL内容在概念上仍然正确)Performance Guide(web.archive.org)