我的应用程序只有一个index.php
它所做的主要事情是
1
。使用facebook登录让用户登录我的应用程序。 (将来我会使用google等其他网站登录等)
2。 “主要工作”吗
3。显示结果。
主要工作:
1。从fb获取访问令牌。 - 拍摄时间<10毫秒
2。获取数据集1 - 使用accesstoken并获取有关用户的数据。 - 大概一秒钟。
3。获取数据集2 - 蜘蛛列表中的每个朋友的partiuclar信息 - 为每个朋友花费大约一秒钟。因此,平均需要大约300秒。
4。做一些处理 - 几秒钟
问题领域 1.步骤3总是超过Max_Execution_Time。
解决方案限制 1.只想坚持使用php。没有Python / ruby。
我的代码框架是:
<?php
// Login
$facebook->getloginurl ......
//Main work
$access_token = $facebook-> ......
$user_id = $facebok->get ......
// Following is the time consuming step
foreach $friend_of_that_user .... get information required for this app.
//Displays result
echo ""
?>
答案 0 :(得分:1)
foreach
循环是问题所在。您正在为每个朋友进行单独的API调用。这需要永远而且不需要。许多API调用也会很快阻止您的应用。
对用户进行身份验证后,您可以拨打$facebook->api('/me/friends?fields=id,name,picture,...', 'GET');
来获取一次通话所需的所有数据。在糟糕的一天,这应该<5秒。使用field expansion,只要您拥有正确的权限,就可以深入了解朋友的数据。
如果您的用户拥有大量朋友,Facebook可能会对结果进行分页。即使这样,您也应该在不超过10个API调用中获得所需的一切。
答案 1 :(得分:1)
您正在为每个朋友提出一个请求!这可以通过以下方法之一来增强:
Field Expansion:
获得前100位朋友的名字和5部电影:
me?fields=friends.limit(100).fields(name,movies.limit(5).fields(name))
Batch API:
例如,要获取5位朋友的详细信息,您可以发出以下批处理请求:
curl \
-F 'access_token=...' \
-F 'batch=[{ "method":"GET","name":"get-friends","relative_url":"me/friends?limit=5",},{"method":"GET","relative_url":"?ids={result=get-friends:$.data.*.id}"}]' \
https://graph.facebook.com/
现在我真的建议考虑分页而不是一起删除limit
字段。如果分页与您的应用程序相关,它可以增强体验很多!