2010-01-13 41 views
8

我想在我的PHP腳本中使用GD庫來從外部服務器生成一個隨機大圖的小縮略圖。每次調用頁面時,GD庫都會重新生成一個縮略圖並顯示它。GD庫是否使用大量內存?

這是否會降低服務器速度或耗用不尋常的內存?

+0

重新生成縮略圖需要服務器時間。要知道它是否「太慢」,唯一的方法就是試試看。另外,「記憶」和「速度」是兩個完全不同的概念。 – 2010-01-13 21:05:56

回答

1

確定它會降低服務器的速度,這也取決於您使用的圖像的大小。你爲什麼不保存縮略圖?

0

如果您在每次頁面加載時生成新的縮略圖,則需要額外的處理時間。根據您縮略圖的圖像數量以及原始尺寸,您可能會注意或不會注意到緩慢。如果無論如何,您可以在第一頁加載時創建縮略圖並保存,並加載預先創建的其他頁面加載版本,則會更好。

7

GD使用大量內存。它將圖像完全加載到內存中並對其進行解壓縮,因此每像素至少需要32位。與大小800×600的圖像做然後用起來:

800 * 600個* 32個比特= 15.4兆比特= 2 MB

這只是加載圖像。我聽說如果你調整大小,它會使用這個的兩倍,如果你的圖像更大,它會更多的記憶。

你應該真的考慮緩存你的縮略圖,這樣它們只需要生成一次(這也會加快訪問者的頁面速度!)。

我也讀過現在您正在從外部服務器加載圖像,在這種情況下,您真的必須緩存圖像,否則您的訪問者必須等待您首先下載整個圖像。如果外部服務器關閉或超載,訪問者將不得不等待超時(這看起來像是你的服務很慢),這會變得更糟。除此之外,如果每次用戶請求縮略圖時下載圖像,則會浪費大量帶寬。


由於GD使用這麼多的內存,所以使用IMagick擴展代替生成縮略圖可能是值得的。 ImageMagick在內存消耗方面的擴展性更好,而且速度也非常快(但由於上述原因,您仍然應該緩存圖像)。

+1

+1 for *「ImageMagick在內存消耗方面做得更好」*,這是您應該以粗體顯示的關鍵信息!你可以刪除其餘的。 :-) – TMS 2012-04-17 20:54:55

1

任何類型的圖像處理都可能是內存密集型的。

如果您可以緩存這些圖片以避免每次點擊頁面時重新生成圖片,那將是一個很好的舉措。

爲您處理大量緩存的PHP庫是phpThumb--它可能是這類任務的理想選擇。

http://phpthumb.sourceforge.net/