2012-02-18 80 views
0

我正在使用YouTube的API来加载用户在Facebook等Feed中的用户共享视频的当前数据,这是因为它会减慢我的网站数量,这是每组数据约2-4秒,所以如果我有一个视频2-4秒,然后2个视频4-8秒等。所以我的问题是有没有办法检索所有的数据与此,并加快它的速度。 (我存储视频的标题和描述在自己的数据库中,当用户共享,但其他的我不能将数据这里是我的代码:YouTube API检索数据显着降低我的网站在加载时

$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"; 

回答

0

您可以使用CURL,file_get_contents .....其不是重点。

重点是:缓存响应!

使用memcached的,文件系统,数据库或者其他,但从来没有调用API在页面加载

0

至于我知道,这通常是PHP不擅长的事情。

它根本不支持多线程和线程正是你想要做的(同时执行所有http请求,以便它们的延迟被合并)。

也许你可以将这部分逻辑移入浏览器,通过使用javascript? JavaScript中的XMLHTTPRequest对象支持多线程。

据我所知,在PHP中执行此操作的唯一方法是使用原始套接字(fsockopen(); fwrite(); fread(); fclose();),但这不适合心脏的佯攻......您需要熟悉HTTP规范。

最后,内容变化很大吗?也许你可以在数据库中拥有本地缓存​​的html,并且可以每隔30秒运行一次cron作业来重建缓存?这可能违反了谷歌的服务条款。

真的最好的解决方案是与其他语言进行服务器通信,一种支持线程的语言,并与您的PHP脚本进行交谈。我可能会使用Ruby。

+0

呀渐入原始套接字是不是我真的甚至懒得做的信息并不完全那么重要,但仅仅是因为我可以做到,或者如果我希望我的网站能够快速发展,我可以做到。我正在做的所有数据只是“377,532,329视图 4.9(共5)(1,323,742评级)” 我曾尝试加载这些数据的部分与ajax调用每个帖子上有一个视频,但它didn这似乎没有任何效果,但我可以用另一种方式来做,只是多一点编码。 – 2012-02-18 00:32:14