如何优化此代码以获得更好的速度?

问题描述:

代码:如何优化此代码以获得更好的速度?

<?php $local_id = $_GET['id']; 

mysql_connect("localhost", "root", "") or die("Could not connect: " . mysql_error()); 
mysql_select_db("database"); 
$sql = mysql_query("SELECT * FROM `videos` WHERE `id` = ".$local_id." "); 
while($row = mysql_fetch_array($sql)){$file = $row["file_url"];} 

header("Expires: Mon, 20 Dec 1980 00:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Pragma: no-cache"); 
header("Content-Type: video/flv"); 

readfile($file); ?> 

该文件是一个FLV的一个,但它需要约1分钟。加载视频

我能做些什么来加载它更快?

此编码是否正确?

+0

我不知道我理解在当前的建设点。是否要获得最后一行,如果超过300行,则是第300行? – AndersTornkvist 2011-05-15 12:43:05

+0

请安装XDebug并查看代码,以查看哪些部分需要很长时间。然后用您的发现更新您的问题。 – Gordon 2011-05-15 12:44:02

+0

我删除了它... – m3tsys 2011-05-15 13:01:32

不要使用输出缓冲来传输大文件。 php必须将整个文件存储在内存中,并等待完全读取后再发送给客户端。只要删除ob_*行应该工作。

+0

我删除了它们,但它的加载速度与之前一样缓慢 – m3tsys 2011-05-15 12:59:53

+0

@ m3tsys如果删除'readfile'行,它仍然很慢吗?如果是的话,你的数据库要么过载,要么连接的延迟太高。如果不是:从什么媒体您正在阅读,即什么文件系统是$文件'和什么是管理计算机的吞吐量? – phihag 2011-05-15 13:10:15

+0

如果我删除它立即加载它的行。我真的不明白第二个问题。 '$ file'它是一个.flv文件(不好的部分是文件很大〜16 MB,这边可以大于这个取决于文件)我使用输出将它显示在jwplayer中。 – m3tsys 2011-05-15 13:17:08

我想说的第一件事就是在Id字段上放一个索引来减少查找时间...并使用memcache来缓存数据库结果 如果你对环境没有约束,我会把一个缓存反向代理nginx使用缓存标头缓存HTTP响应,但将适用于每个客户端。或者有硬件设备,这样做对你来说...通常相当昂贵,虽然