API Facebook очень медленный - PullRequest
3 голосов
/ 13 мая 2011

Я пытаюсь подать заявление, получая все дни рождения и другую информацию от ваших друзей из Facebook, используя php sdk facebook.

я получаю список друзей и с циклом foreach, получаю всю информацию для идентификатора каждого друга.

Это все работает, только 4 минуты +, чтобы получить всю информацию. (для каждого друга я должен сделать новый звонок)

Я не могу ожидать, что пользователи моего приложения будут ждать так долго.

Есть ли способ получить информацию быстрее.

это мой код:

<code>
    //$arrFriends is a list with all id's and names of friends

foreach ($arrFriends as $f => $value)
            {
                echo('<pre>');
                $fql = "select uid, email, name, hometown_location, sex, birthday, education, relationship_status, pic_square from user where uid=" . $value[id];
                $param = array('method' => 'fql.query','query' => $fql,'callback' => '');
                $friend = $facebook->api($param);
                //dan opslaan in de database:
                print_r($friend);
                echo('
'); }

Ответы [ 3 ]

5 голосов
/ 13 мая 2011

Вы можете использовать

SELECT uid, name, pic_square FROM user WHERE uid = me()
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

Ссылка: https://developers.facebook.com/docs/reference/fql/

Тот же результат, быстрое, быстрое, элегантное решение. Пусть спектакль будет с вами.


Другое решение (для вас идея)

Если у вас есть сотни друзей, это вполне нормально и ожидаемо. Вы запрашиваете API Facebook для сотен раз в цикле.

Многие масштабируемые приложения Facebook выполняют эту работу асинхронно в фоновом режиме (в очереди задач) или, возможно, полностью на другом компьютере, чтобы не замедлять работу и не загружать процессор.

Попробуйте использовать OR конъюнктивы в ваших FQL-запросах.

$fql = "select [...] from user where uid=123213312 OR uid=129038823 OR uid=893423890

Но в этом случае ваш FQL-запрос становится все больше и больше, так что вам придется делить его. Поэтому используйте первое решение.

1 голос
/ 15 июня 2012

Если вы не хотите использовать FQL, пакетные запросы предназначены именно для этой цели.Вы строите массив графовых запросов и отправляете их вместе.Согласно документации они обрабатываются параллельно.

1 голос
/ 13 мая 2011

Каждый fql-запрос включает http-запрос к facebook, который, вероятно, будет медленным.

Если вы можете обработать запрос, чтобы получить все результаты в одном ответе, а затем обработать этот ответ в цикле, вы, вероятно, получите намного более высокую производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...