2011-05-15 113 views
1

代碼:如何優化此代碼以獲得更好的速度?

<?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

回答

0

不要使用輸出緩衝來傳輸大文件。 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

0

我想說的第一件事就是在Id字段上放一個索引來減少查找時間...並使用memcache來緩存數據庫結果 如果你對環境沒有約束,我會把一個緩存反向代理nginx使用緩存標頭緩存HTTP響應,但將適用於每個客戶端。或者有硬件設備,這樣做對你來說...通常相當昂貴,雖然