2012-03-26 19 views
2

我有很多粉丝页面,我在Facebook管理,我做了一个脚本,让我看看他们有多少粉丝。我在mySQL数据库中保存了页面(page_name + page_id)。
该脚本进行FQL查询并打印每页有多少个粉丝。
问题是,当我添加FQL查询时,页面变得很慢。我猜如果我添加其他FQL查询,它将变得非常缓慢加载。
mySQL + Facebook FQL查询使我的页面真的很慢。如何提高性能?

我的问题是:有什么方法可以使用,以便我的页面尽可能快地加载?
我想过把粉丝和其他数据保存在数据库中。但这意味着我不会有实时数字。

谢谢。

$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

从数据库获取所有页面标识符,然后对图形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 />'; 
} 

BTW,决不但从来没有做这样的外部服务的调用与未知的迭代次数和确保不同时具有开放连接到数据库的循环(这可能会减慢不仅单个用户的结果,但可能对其他访问者/应用程序用户有影响)!

P.S.
您可以阅读一些关于FQL性能从删除和过时(FQL的东西仍然在概念上正确)Performance Guide(web.archive.org)

+0

谢谢你这个答案。所以我和你的方式之间的区别(你的确是更好)是你将数据库中的ID保存在一个数组中,以便让数据库“在游戏的正常范围之外”? – EnexoOnoma 2012-03-26 12:06:48

+0

另一个,如果我使用cron作业创建一个后台脚本,它会检查并保存每个页面每2-3分钟的粉丝数量?如果我只从我的数据库中获取数据,这会提高速度吗? – EnexoOnoma 2012-03-26 12:22:49

+0

@Kaoukkos,不同之处在于我提供的代码是对Graph API进行单一调用,也可以为每个页面调用(如果用户有12个页面,则会为您节省11个带有所有网络开销的额外调用)。当然,查询很多页面可能比较慢,但与其他页面的不同调用相比,速度更快)。 – 2012-03-26 13:30:34