Facebook连接速度很慢,我可以使用AJAX吗?

时间:2012-05-02 14:58:58

标签: php facebook fbconnect

我正在实现facebook php sdk并将其用于用户登录/连接。 一切都按预期工作,但是,在每个页面的顶部,我需要打电话 $ facebook-> api('/ me')确定用户是否登录..

此调用非常缓慢,有时需要2秒才能返回。

因此,在任何页面加载之前,用户的任何交互总是有1-2秒的延迟..

我怀疑,这是因为,$ facebook-> api('/ me')来电正在使用httpS ..

任何建议......

          $facebook = new Facebook(array( 'appId'  => 'xxxxxxxxxxxxxxx',  'secret' => 'xxxxxxxxxxxxxxxxx',));
          $user = $facebook->getUser();
          if ($user)
           {
           try                               {  $user_profile = $facebook->api('/me','GET'); }
           catch (FacebookApiException $e)   {  error_log($e);  $user = null;  }
           }
          $login_parms = array('scope' => 'user_birthday', 'redirect_uri' => 'http://xxx.com/login');
          $login_link  = $facebook->getLoginUrl($login_parms);


          if($user) 
           {
           /* logged in */
           }
          else
           {
           /* not */
           }

3 个答案:

答案 0 :(得分:2)

你真的不应该在每个页面加载上执行Facebook API请求。只有在用户登录时才执行一次。然后您可以在会话中存储“登录”标志(或签名的cookie)。

如果您需要存储,例如一些用户的Facebook个人资料信息,也将它放在会话或您的数据库中。

答案 1 :(得分:1)

在登录表单中添加一些旋转轮,然后在文档上调用ajax准备好你的php脚本,脚本返回false或loged用户数据(或者如果你需要更多数据 - 重定向url)然后根据结果show form来登录或显示当前隐藏在用户中。

我的意思是Javascript将处理所有逻辑,具体取决于从服务器返回的内容,重定向,更改UI等。

另一种方法是缓存(会话有效期)首次调用facebook,如果用户已经记住它。并检查该Session变量是否存在且尚未过期。只在执行某些敏感任务时才会再次呼叫或过期。

答案 2 :(得分:0)

如果您不需要从$ facebook-> api(“/ me”)获取“新鲜”值。 然后我建议你缓存响应,如果你使用任何PHP框架(例如Zend,Yii,Codeigniter),这应该是非常直接的。

如果您没有使用PHP框架,我建议您仍然可以查看优秀的ZF文档,了解其缓存解决方案。

Zend Framework - Cache

但是,如果您每次加载都需要新值,则可以创建一个只返回$ facebook-> api(“/ me”)部分的简单页面,并将其作为裸HTML返回。然后简单地保留一个或类似的,当它完成时收到响应。 一个简单的解决方案是使用jQuery并写下:

$("#div-id").load("/page-that-returns-facebook-api-me-result");