我正在努力计算我和所有朋友的共同朋友的数量。
foreach($friends_list as $friend)
{
$id = $friend['id'];
$name = $friend['name'];
$arr = $facebook->api('/me/mutualfriends/'.$id);
$arr = $arr['data'];
$count = count($arr);
$totalcount = $totalcount + $count;
$i++;
echo $id. " " .$name . " " . $count . "</br>";
}
但是我得到的时间就像获得了大约20个frnds的数据一样。我该如何进行优化?
答案 0 :(得分:1)
由于php.ini
中max_execution_time
的配置设置,您的脚本出现超时,如果您在运行该长操作之前使用此类内容,则可以轻松避免这种情况:
set_time_limit(0);
// execute long running code...
在循环中对外部服务做很多请求是很糟糕的,并且有很多方法可以更快地改进代码。
选项1:您可以Batch Requests使用Graph API一次运行多个请求(最多50个)。
选项2:您可以在其他方向获得mutualfriends
连接(一次为多个朋友获取结果)。
https://graph.facebook.com/mutualfriends/YOUR_ID?ids=friend_1,friend_2,friend_n
这通常与:
相同https://graph.facebook.com/friend_1/mutualfriends/YOUR_ID
https://graph.facebook.com/friend_2/mutualfriends/YOUR_ID
https://graph.facebook.com/friend_n/mutualfriends/YOUR_ID
答案 1 :(得分:0)
我建议在该循环中放置一个sleep
,以免服务器过载。
e.g。
foreach( $friends_list as $friend )
{
$id = $friend['id'];
$name = $friend['name'];
$arr = $facebook->api('/me/mutualfriends/'.$id);
$arr = $arr['data'];
$count = count($arr);
$totalcount = $totalcount + $count;
$i++;
echo $id. " " .$name . " " . $count . "";
usleep( 100000 );
}
在每次请求后等待100毫秒。
答案 2 :(得分:0)
更新php.ini文件中的'max_execution_time'设置。默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值。