2009-08-14 50 views
0

我在PHP中有一個將圖像大小調整爲縮略圖的功能,我的圖像上傳腳本需要上傳的圖像並運行此功能來調整圖像的大小,如果它的寬度超過700px,功能可以再創建2個不同尺寸的縮略圖圖像,因此每次用戶上傳圖像時總共會保存3個圖像。我的縮放/縮略圖功能在縮略圖中被調用2次,如果文件在寬度上很寬,偶爾會調用第3次。有關PHP中圖像縮略圖性能的問題

現在這個調整大小的函數使用getimagesize()來獲取尺寸,所以我的uplaod腳本調用這個函數,然後調整大小函數使用getimagesize()函數2-3次來製作其他大小的圖像。

我在想,我應該只是將尺寸傳遞給resize函數,因爲我在上傳過程中獲得它們?

我真正的問題是,getimagesize()是一個資源飢餓的functon,最好是儘可能使用它,或者在1張圖片上傳的時候多次調用它幾次?

回答

3

只是一個提示/ precausion,我asssume你使用GD功能。創建多個縮略圖時,通常的瓶頸是錯誤地實現了圖像大小調整功能 - 每次讀取原始圖像,然後保存調整大小的圖像。一個更好的方法是加載一次圖像,並使用圖像資源製作所有縮略圖(使用imagecopyresampled) - 不僅將圖像尺寸傳遞給函數 - 還傳遞GD引用。Thay您的原始文件只能加載一次。

+0

感謝這就是我正在考慮的事 – JasonDavis 2009-08-14 22:46:05

2

對於只在上傳時運行的東西,它不應該打擾太多。上傳不是用戶希望獲得超級快速響應的操作。 不成熟的優化是所有邪惡的根源

這就是說,getimagesize()並不是特別昂貴,但如果你只能這樣稱呼一次。但我並沒有預測到速度會有所提高。腳本的昂貴部分是調整圖像大小本身。

1

這不是特別資源飢餓 - 它必須打開一個文件並閱讀圖像標題。

不要用你的方式優化它 - 如果它很容易,那就去做吧。否則,請在優化之前觀察應用程序瓶頸在哪裏。

0

最好的辦法是分析你的腳本。

而不是理論上的答案,可能不適用於特定的情況,你會得到一個真正的答案,這是非常有啓發性的。

而且,與這樣的習慣,你將能夠:

  • 發現瓶頸
  • 使微的優化和主要優化之間的區別。

我親自開發。在Windows上並部署在* nix上。

在我的開發工具中,我使用xdebug + WinCacheGrind來讀取結果。

我離不開他們。 :)

http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/

0

我不認爲上傳部分應該是你調整圖像大小的地方。您應該稍後調整圖像作爲cron作業。您可以使用第三方應用程序,如imagemagick或其他調整大小的應用程序來調整圖像大小。這樣可以節省前端的時間。您可以每隔5分鐘左右運行一次調整大小作業。

+0

我一直在考慮這個 – JasonDavis 2009-08-14 22:47:12