我正在使用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";
发布于 2012-06-05 21:36:36
您可以使用CURL、file_get_contents .....这不是重点。
重要的一点是:缓存响应!
使用memcached、文件系统、数据库或其他任何东西,但永远不要在页面加载时调用API
发布于 2012-02-18 08:27:09
据我所知,这通常是PHP不太擅长做的事情。
它根本不支持多线程,而线程正是您想要做的(同时执行所有http请求,以便合并它们的延迟)。
也许你可以使用javascript将这部分逻辑转移到浏览器中?JavaScript中的XMLHTTPRequest对象支持多线程。
据我所知,在PHP中唯一的方法是使用原始套接字(fsockopen(); fwrite(); fread(); fclose();
),但这不是为了假装用心……您需要熟悉HTTP规范。
最后,内容会有很大变化吗?也许您可以在数据库中对html进行本地缓存,并使用cron作业(可能每30秒运行一次)来重新构建缓存?这可能违反了谷歌的服务条款。
实际上,最好的解决方案是使用支持线程的其他语言进行服务器通信,并使用PHP脚本与之对话。我可能会用Ruby。
https://stackoverflow.com/questions/9337204
复制相似问题