Facebook $facebook->getUser() 非常非常慢



我在oauth2应用程序中遇到了facebook PHP- sdk的问题。我通过JS-SDK使用登录,但通过PHP处理大部分应用程序。

下面是我用来处理这个的PHP代码:

<?php
    $uid            =   null; 
    include_once "lib/facebook.php";
    if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
    {
        header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"');
    }
    $facebook = new Facebook(array(
      'appId'  => FB_APP_ID,
      'secret' => FB_APP_SECRET,
      'cookie' => true
    ));
    $user = $facebook->getUser(); // this take for ever
        if ($user) {    
            try {
                $uid      =   trim($user);
                $me     =   $facebook->api('/me');
            } catch (FacebookApiException $e) {   
              echo $e;
                try {
                    $uid      =   trim($user);
                    $me     =   $facebook->api('/me');
                } catch (FacebookApiException $e) {  
                }
            }
        }
?>
我发现$facebook->getUser();在过去的3个小时减慢了我的应用程序,有时它需要2分钟,直到脚本继续。但大多数情况下是30秒以上。有没有办法缓存它或者加速它?

你也可以通过避免

来加速你的网站
$user = $facebook->getUser();

只要你能。我的网站上的每个页面都出现了半秒的性能问题,因为我正在调用该函数来检查用户是否仍在登录。

这个检查对你来说可能是必要的,但对我来说不是。如果您的站点可以在用户点击登出按钮之前放弃该检查,则替换

$user = $facebook->getUser();

if(! isset($_SESSION["fb_<my App ID>_user_id"])) // Replace <my App ID> with yours
  $user = $_SESSION["facebook"]->getUser();

和调用

if(isset($_SESSION["fb_<my App ID>_user_id"]))
  unset($_SESSION["fb_<my App ID>_user_id"]);

在您的登出页面。这将加快整个网站。

如果您的用户没有登录,您将经常有效地调用getUser()。但是,如果用户没有登录,这似乎工作得很快。

问题解决了,API的反应又足够快了

最新更新