2010-03-09 43 views
3

在我的網站上,我想爲用戶提供一個頁面,上面有很多小圖片,有點像Windows中的縮略圖。
所有圖片文件大小從1KB到300KB不等,但通常不大於5KB。如何在網站上高效地存儲和提供大量小圖片?

目前所有這些圖像都位於網絡服務器(linux + apache)上的一個文件夾中,但我不認爲這是最好的解決方案,特別是如果我必須擴展到多個Web服務器和當我有數以千計的時候。

所以,我應該把這些文件放入數據庫(我可以)嗎?或者有一個單獨的文件服務器?其他建議?

回答

4

有幾件事情要考慮:

  • 不要把圖像數據庫,除非你可以把它在記憶。普通文件通常是二進制數據的完美解決方案,並且您仍然會爲每個文件分別發出HTTP請求。
  • 如果您可以鏡像多臺服務器上的圖像並在它們之間取得平衡,那很好。
  • 如果您沒有額外的服務器,請嘗試使用虛擬子域僞造它以規避併發連接限制。見this article。與此相關的還有:在每個子頁面上的每個頁面上分佈圖像,每個圖像上分別有2個或更多圖像。
  • 不要嘗試壓縮流量。你只會浪費CPU時間。
  • 確保您使用適當的緩存(例如遠期將過期)用於靜態圖像。如果圖像更新,您可以隨時更改地址。
  • 請確保您提供來自無Cookie(子)域的所有靜態內容。
+0

好點!有關使用雲的評論? – 2010-03-10 01:01:59

+0

我還沒有任何在雲上運行大型Web服務器的實踐經驗(只有批量的東西),所以,唉,我不能在那裏提供任何可靠的信息。 – 2010-03-10 14:14:42

1

您希望儘可能少放置CPU時間/圖片。我會建議使用代理服務這些圖片(作爲靜態內容)。我有與nginx良好的經驗,它是快速可靠的。

你的配置可能是這個樣子

worker_processes 1; 
events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    sendfile  on; 

    keepalive_timeout 300; 

    server { 
     listen  8080; 
     server_name localhost; 

     location /static/ {root static/pictures/;} 

     location/{ proxy_pass http://127.0.0.1:8081; } 
    } 
} 

如果你有8081端口服務器,你直接從文件夾/靜態/圖片爲你的圖片。 (請注意,以「/靜態」將這個文件夾提供服務的所有URL)。

相關問題