Facebook $ facebook-> getUser () очень очень медленно - PullRequest
1 голос
/ 15 октября 2011

У меня проблема с PHP-SDK facebook в моем приложении oauth2. Я использую вход через 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 с секунд. Есть ли способ кешировать это или способ ускорить это снова?

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Вы также можете ускорить свой сайт, избегая

$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 (). Но это, кажется, работает очень быстро, если пользователь не вошел в систему.

0 голосов
/ 18 октября 2011

Проблема решена, API снова реагирует достаточно быстро.

...