2010-08-30 66 views
1

我在想,哪種管理縮略圖的方式對網站服務器的性能影響較小。請求時在運行時生成縮略圖圖像,或在硬盤中預先生成縮略圖?

這是情形:

1)每個訂單可具有最多10個圖像。 2)訂單完成後不需要存儲圖像(最長爲2周)。 3)潛在地,可能在任何時候都有幾千個活動訂單。 4)帶圖片的訂單經常會被客戶訪問。

IMO在硬盤上預先生成縮略圖是一個更好的解決方案,因爲即使使用RAID,硬盤也更便宜。

但是磁盤I/O速度以及加載映像所需的資源呢?它會花費更多的資源而不是實時生成縮略圖嗎?

如果您能分享您的意見,我們將非常感謝。

回答

1

如果訂單經常被客戶訪問,最好創建縮略圖並存儲在磁盤上。這種方式網絡服務器不需要處理那麼長的頁面。它會加快你的網頁加載時間。

1

這取決於你的負載。如果多次請求資源,則緩存它是有意義的。

是否總會有圖像?如果沒有,您可以在第一個請求上創建它,然後將其緩存在內存中,或者更可能是數據庫,以用於後續請求。

但是,如果您始終需要每個訂單存在n張圖像,並且/或者您有多個訂單正在定期創建,則最好將縮略圖創建傳遞給工作線程或某種異步頁面。這樣,多個請求可以堆疊起來,減少服務器上的負載。

+0

緩存許多訂單的圖像,它會潛在地消耗大量的記憶? – 2010-08-30 06:05:32

+0

在內存中?這取決於圖像的大小和可用內存量。除非圖像每小時請求數百次,否則最好將圖像存儲在磁盤上。非常便宜。閱讀圖像的IO成本通常很小,購買HHD便宜。您甚至可以創建一個計劃任務,在滿足設定的過期標準(即2周)後刪除圖像。 – 2010-08-30 06:12:13

1

我建議兩者的組合 - 動態生成與磁盤緩存。這可以防止未使用的圖像造成浪費的空間,但對於重複請求的圖像絕對不會增加開銷。 SQL和mem緩存不是好的選擇,都需要太多的RAM。 IIS只能使用100k的RAM來從磁盤提供大圖像。

在創建http://imageresizing.net時,我發現了29 image resizing pitfalls,其中很少是顯而易見的。我強烈建議閱讀清單,即使它有點無聊。您需要一個HttpModule才能將緩存的請求傳遞給IIS。

雖然 - 爲什麼重新發明車輪?該庫被廣泛使用並經過良好測試。