2012-12-14 28 views
2

最近我試圖將圖像存儲在Mysql數據庫中(使用BLOB數據類型),使用php和web來上傳和存儲它。它工作正常,除了加載足夠大的圖像時,它會加載非常緩慢。有什麼辦法可以更快地加載這個圖片嗎?如何更快地從Mysql加載圖像?

注:我的朋友建議我使用武力緩存到該圖像(他說,有關改變圖像的內容頭),但我不知道該怎麼做。我懷疑它會帶來更好的表現。

在此先感謝

+0

也許這後約[緩存動態數據](http://stackoverflow.com/questions/10596116/caching-http-responses-when-they-are-dynamically-created-by-php/10596231#10596231)可以幫助你 –

回答

0

我想緩存可以很好或不是。相反的,我建議你上傳圖片或其他文件到文件夾和數據庫保存只是文件中的信息:名稱,類型,大小,文件夾,等等...

0

如果你沒有任何必要,需要您將圖像存儲在數據庫中,圖像在文件夾內更好,您應該在數據庫中存儲的是路徑或每個圖像的名稱。

這會使它們正常加載。當然,取決於圖像的大小。

這就是你會發現什麼在幾乎所有的Web應用程序。

+1

thx。我知道,但我喜歡簡單,當我需要刪除,更新或備份數據庫。我只是使用SQL查詢來做到這一點,而不需要照顧文件夾中的圖像。 – DennyHiu

+0

沒關係。只需要注意數據庫空間。 – Alvaro

2

圖像應該被緩存。我認爲這可以通過確保您製作的圖片url始終與相同圖片相同來完成。我認爲你的問題是,但你需要改變max_allowed_pa​​cket。如果它太小,它將無法一次性通過網絡發送太多數據。另外,如果圖片真的很大,我還會考慮將圖片質量改爲70%?所有調整大小的圖像函數都有一種方法來改變它。即:http://php.net/manual/en/function.imagejpeg.php。希望有所幫助。我也會考慮YSlow。它會幫助指出你的圖像究竟是什麼錯誤,使它加載緩慢。無論是質量,緩存,壓縮還是w/e都可能。

+0

thx回覆。我確保圖片網址始終指向相同地址的相同圖片。仍在重新加載,並且仍然很慢。但是,當談到你對imagejpeg的PHP函數的建議時,它是岩石!它減少了重新加載時間很多 – DennyHiu

+0

我也想看看yslow插件。它會幫助指出你的圖像究竟是什麼錯誤,使它加載緩慢。無論是質量,緩存,壓縮還是w/e都可能。 –

+0

我還沒有檢查出其他因素。我剛剛得到怪異的印象,當我所有的網站的元素成功加載了,我還是得從MySQL裝載 – DennyHiu

1

緩存圖像時存儲在文件系統中的圖像都可以使用。如果它們從數據庫動態彈出並打印出來,每次PHP代碼請求它們時都會被抓取。

這可能是因爲圖像是在數十毫秒的牽強,但一個3MB的圖像數據可以被下載到客戶端瀏覽器進行5秒至1分鐘(取決於連接速度)。與它沒有太大的關係(在共同的共享主機上甚至更少)。

我建議將圖像存儲在文件系統中,以便它們可以被瀏覽器緩存,或者您甚至可以在Apache服務器上設置一個memcache,以便在到期時它們將從緩存中提供。

+2

誰說圖片不能被緩存等待的形象,如果他們是從一個數據庫來的? :) –

+0

這取決於他們的打印方式......如果他們被內嵌打印像''他們可能不會被緩存一個base64數據...除非FPC緩存被啓用? – shadyyx