我正在使用YouTube的api来加载用户在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";
答案 0 :(得分:0)
据我所知,这通常是PHP不太擅长的事情。
它根本不支持多线程,并且线程正是您想要做的(同时执行所有http请求,以便合并它们的延迟)。
也许你可以通过使用javascript将这部分逻辑移到浏览器中? JavaScript中的XMLHTTPRequest对象支持多线程。
据我所知,在PHP中使用原始套接字(fsockopen(); fwrite(); fread(); fclose();
)的唯一方法是使用原始套接字({{1}}),但这不是为了佯装...你需要熟悉使用HTTP规范。
最后,内容变化多少了?也许您可以在数据库中拥有html的本地缓存,以及可以重建缓存的cron作业(可能每30秒运行一次)?这可能违反谷歌的服务条款。
真正最好的解决方案是与其他语言进行服务器通信,支持线程,并使用PHP脚本与之交谈。我可能会使用Ruby。
答案 1 :(得分:0)
你可以使用CURL,file_get_contents .....这不是重点。
重点是:快速响应!
使用memcached,文件系统,数据库或任何但从不在页面加载时调用API