Я не знаю, делаю ли я что-то неправильно или Twilio просто медлительно запрашивает записи. При запросе списка конференций с помощью php ответ может занять до 5-7 минут, что не представляется возможным для любого типа приложения.
Вот пример кода, который я использую:
$conferences = $client->account->conferences->getIterator(0, 50, array(
));
foreach ($conferences as $conference) {
$conferenceRoom = $client->account->conferences->get($conference->sid);
$date1 = new DateTime($conference->date_created);
$date2 = new DateTime($conference->date_updated);
$interval = $date1->diff($date2);
$page = $conferenceRoom->participants->getPage(0, 50);
$participants = $page->participants;
$participantCount = count($participants);
$result['conferences'][$conference->sid]['friendly_name'] = $conference->friendly_name;
$result['conferences'][$conference->sid]['sid'] = $conference->sid;
$result['conferences'][$conference->sid]['participants'] = $participantCount;
$result['conferences'][$conference->sid]['status'] = $conference->status;
$result['conferences'][$conference->sid]['duration'] = $interval->format('%H:%I:%S%');
$result['conferences'][$conference->sid]['date_created'] = strtotime($conference->date_created);
$result['conferences'][$conference->sid]['date'] = $conference->date_created;
}
echo json_encode($result);
Twilio разработчик евангелист здесь.
Вы используете getIterator
метод для ресурса конференций в библиотеке PHP. getIterator
возвращает интегратор, который обрабатывает разбиение на страницы для вас, поэтому, пока вы продолжаете циклически проходить по нему, он будет продолжать запрашивать страницы из Twilio API. Я предполагаю, что у вас было много конференций, поэтому вы продолжаете пейджингить некоторое время.
Кроме того, для каждой конференции вы затем делаете вызов API для ресурса конференции и еще один вызов API для участников вызова. Даже если у вас есть только 10 конференций в вашей учетной записи, вы будете делать 30 вызовов API.
Итак, хотя Twilio не тратит 5-7 минут, чтобы вернуть один ответ, ваш скрипт выполняет огромную работу с API, который занимает много времени.
Я согласен с предложением Half Crazed (кстати, отличное имя) о результатах кэширования. Вы можете обновить объект конференции в вашей собственной системе, настроив URL обратного вызова для ваших звонков так что Twilio может отправлять вам обновления статуса о конференц-связи, и вы можете сохранить информацию об этом на этом этапе.
Хотя я не вижу ничего плохого в коде, при работе с API обычно лучше иметь отдельный сервис (например, задание CRON или отдельный поток) для вызова API и кэширования результатов. Ваше приложение в режиме реального времени будет считывать из кэшированных результатов … таким образом, на скорость вашего сайта не влияют сторонние сайты. Это, вероятно, хорошая идея, чтобы отобразить небольшую заметку, что-то вроде «Результаты, последние обновленные на XYZ»
Существует масса причин, по которым медленные страницы загружаются плохо.