【问题标题】:Graph api (facebook) is too slowGraph api(facebook)太慢了
【发布时间】:2011-06-18 14:22:30
【问题描述】:

当我使用 Graph API 进行简单操作时,例如:

require 'src/facebook.php';

# facebook class
$facebook = new Facebook(array(
  'appId'  => 'XXX',
  'secret' => 'XXX',
));

for ($i = 0; $i < 9; $i++)
{
    $url = $facebook->api('/Intel');
    echo $url['name'] . '<br />';
}

(只是一个简单的例子,我想返回 9 个不同的页面但现在没关系)

嗯,这个动作需要 9 到 10 秒!太多了..这是页面上唯一的动作(您可以尝试运行它并查看)。

我能做什么? (如果我通过 api [as method fql.query] 使用 FQL,它不会提高运行时间,我检查了它)我必须使用图形 api。

顺便说一句,我使用的是 PHP SDK 3.0.1(最新版本..也许这是问题所在?)

【问题讨论】:

  • 我的响应时间约为 250 毫秒。所以它不是脸书。也许您的服务器带宽有限。
  • 真的吗?奇怪.. 但是服务器在我的其他网站上运行得非常快。
  • 你能把你测试的完整代码发给我吗?我尝试在另一台服务器上运行相同的代码,但又花了 9-10 秒。
  • 我在另外两台服务器上试了一遍.. 太费了.. :\

标签: php facebook facebook-graph-api


【解决方案1】:

您是否意识到您正在循环进行远程调用?它会一一进行多次远程调用,这就是为什么它很慢。 API 太快了。 我建议您在这里使用 FQL 并批量发送多个查询。这样您就可以进行一次远程调用并同时获取多个查询的数据。

/**
 * FQL multiquery
 */
$multiquery_fql[ 'query1' ] = $query1;
$multiquery_fql[ 'query2' ] = $query2;
$multiquery_fql = json_encode( $multiquery_fql );
$multiquery_result = $facebook->api(array(
    "method"    => "fql.multiquery",
    "queries"     => $multiquery_fql,
    'access_token' => '' // fill a generic token here (granted to app, independent of user)
));

我总是建议使用应用程序。如果出现问题,最好阻止您的应用而不是 IP。

【讨论】:

  • 非常感谢!它比我的代码运行得更好,但我仍然有一点速度问题(我更新了 test.php 上的代码,你能告诉我它的速度是否正常吗?)和..你是什么意思使用应用程序?我创建了一个应用程序,但此页面仅用于演示问题的测试。
  • 顺便说一下,我看到有时多查询会从代码中省略页面。 (你可以在页面test.php..上看到。刷新几次,看到有时页面细节丢失)
  • test.php 对我来说几乎是即时的。解析 DNS 后,它会在一秒钟内加载。
  • 你怎么知道有DNS问题?我在另外两个托管服务(使用另一个域)上尝试了代码,速度是一样的。
  • 我什么时候说是 DNS 问题了?我说“对我来说”,在解析 DNS 后,它也很快,查询在一秒钟内就可以正常加载。
【解决方案2】:

对于这部分图形 api,您不需要 api,所以不要使用它。只需通过 curl 和 json_decode 获取 http://graph.facebook.com/Intel

或者如果你可以使用它

$data = json_decode(file_get_contents('http://graph.facebook.com/Intel'));

【讨论】:

  • cUrl 可能是个好主意 - 但是.. 如果 API 太慢,为什么要创建它?你的 json 代码对我来说工作缓慢,它不能通过 php sdk 工作,所以也许它真的是我的服务器。谢谢。
  • 只需在浏览器中调用url或通过wget查看速度。在我的服务器上,它位于 50MS 区域。 (也许你的 DNS 解析有问题,得到了一次,dns 查找持续时间 500-750MS,将 DNS 更改为其他服务器,它下降到 50-100MS)
  • 我在另外两台服务器上尝试了相同的代码,使用其他域/DNA。你能把你用的代码发给我吗?我用完整的代码编辑了这个问题,我认为没有问题,但只要告诉我它是否相同..
猜你喜欢
  • 2012-04-18
  • 2017-03-29
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2016-02-01
  • 2013-03-10
  • 2014-06-07
  • 2016-05-31
相关资源
最近更新 更多