Я пишу веб-приложение, которое позволяет пользователям искать данные из своего профиля Facebook, а также их друзей (которые также разрешили приложение). Первоначально я перебирал друзей и делал отдельные вызовы API для получения данных друзей, но это было слишком медленным. Поэтому я переключился на создание массива запросов API и отправку одного из них batch request.Запрос пакета API Facebook API очень медленный
Предполагается, что пакетный запрос является решением моей проблемы, но он STILL мучительно медленный. Загрузка моей страницы составляет около 15 секунд, и я не могу понять, почему. В документации утверждается, что каждый запрос в пакете обрабатывается параллельно, но, похоже, это не так. Имеет ли значение, что каждый из моих пакетных запросов принимает уникальный токен доступа? В документации не означает, что это проблема, но в документации не говорит много вещей ...
Вот пример одного из моих пакетных запросов:
[
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"}
]
Просто чтобы дать вы в каком-то контексте, приложение делает один запрос API для получения друзей пользователя. Затем он просматривает эти результаты и строит пакетный запрос для каждого друга (который разрешил приложение) и отправляет второй запрос на пакет API с помощью PHP SDK ($ json_batch - пакетный запрос, подобный показанному выше):
$rawdata = $facebook->api('?batch='.$json_batch, 'POST');
(пример выше). Кумулятивные результаты проверяются на совпадения с поисковым запросом пользователя и возвращаются обратно пользователю. Любые идеи, почему это должно занять 20 секунд?
UPDATE: Я добавил код для отслеживания времени в разное время во время выполнения сценария ... Весь класс работает в 11-13 секунд. Первый вызов FB api (на график) занимает 0,6 секунды. Второй пакетный вызов - 10-11 секунд! Но почему?
Спасибо Nitzan. Я был обеспокоен тем, что ответ может оказаться FQL ... Я до сих пор избегал этого, но, возможно, пришло время «укусить пулю» и переписать вызов API как FQL. Я попробую сделать несколько тестов и отчитаться. – emersonthis
Почему вы избегаете fql? –
Я не очень разбираюсь в MySQL, поэтому для меня это менее интуитивно понятно. Легко ли перевести один из моих проблемных вопросов выше? Я хотел бы попробовать пакетный запрос fql как можно скорее, чтобы увидеть, есть ли существенная разница в скорости ... а затем потратьте время, чтобы лучше изучить его. – emersonthis