Поиск данных через API YouTube значительно замедляет мой сайт при загрузке - PullRequest
0 голосов
/ 18 февраля 2012

Я использую API YouTube для загрузки текущих данных о видео, которые пользователи публикуют на сайте, в фиде, таком как Facebook, дело в том, что он сильно замедляет мой сайт, это примерно 2-4 секунды на набор данных, поэтому, если у меня есть одно видео 2-4 секунды, затем 2 видео 4-8 секунд и т. д. Итак, мой вопрос, есть ли способ не извлекать ВСЕ данные с этим, и ускорить его больше. (Я сохраняю название и описание видео в своей собственной базе данных, когда пользователь делится им, но другие данные я не могу. Вот мой код:

 $JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json");
 $JSON_Data = json_decode($JSON);
 $ratings = $JSON_Data->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'average'};
 $totalRatings = number_format($JSON_Data->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'numRaters'});
 $views = number_format($JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'});

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

 $thumbnail = "http://img.youtube.com/vi/".$videoID."/2.jpg";

Ответы [ 2 ]

0 голосов
/ 05 июня 2012

Вы можете использовать CURL, file_get_contents ..... это не главное.

Суть в том, чтобы: ЗАПРОСИТЬ ОТВЕТ!

Используйте memcached, файловую систему, базу данных или что угодно, но никогда не вызывайте API при загрузке страницы

0 голосов
/ 18 февраля 2012

Насколько я знаю, это вообще то, что PHP не очень хорошо делает.

Он просто не поддерживает многопоточность, и потоки - это именно то, что вы хотите (выполнить все запросы http одновременно, чтобы их задержка была объединена).

Возможно, вы можете переместить эту часть логики в браузер, используя JavaScript? Объект XMLHTTPRequest в JavaScript поддерживает многопоточность.

Насколько я знаю, единственный способ сделать это в PHP - это использовать необработанные сокеты (fsockopen(); fwrite(); fread(); fclose();), но это не для сердца ... вам нужно быть знакомым с Спецификация HTTP.

И, наконец, сильно ли меняется контент? Возможно, у вас может быть локальный кеш HTML в базе данных и задание cron (которое может запускаться каждые 30 секунд) для восстановления кеша? Это может быть нарушением условий обслуживания Google.

Действительно, лучшим решением было бы установить связь с сервером с другим языком, поддерживающим многопоточность, и поговорить об этом с помощью своего PHP-скрипта. Я бы вероятно использовал Ruby.

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