2011-11-10 64 views
3

可能重複:
Super fast getimagesize in php有效的替代和getimagesize()在PHP

我想所有的圖像的網頁中的圖像尺寸(因此所有的img標籤)

問題是PHP的getimagesize()功能是如此低效。

我試圖運行這個...

for($i=0;$i<55;$i++){ 
    getimagesize('http://www.blackcommentator.com/265/265_images/265_cartoon_do_something_now_bill_large.jpg'); 
} 

..和它花了很長的時間才能完成。

我想知道是否有人知道更有效的替代getimagesize()爲了獲得在使用PHP的網頁中的圖像的大小,當它是典型的獲得20-30圖像的大小。

+2

我想這是一個網絡限制(即實際抓取圖像的往返時間比實際計算其大小更長)。您可能需要在運行代碼的服務器上的映像上進行基準測試。 –

+0

不是真的,我們的目標是幾乎讓任何一個網頁中的所有圖片,並明確,即使我只是拿了所有的img標籤它並不需要很長時間來下載這些圖片,否則所有網頁將是緩慢....說cnn.com和計算他們的圖像大小,它仍然需要很長時間,即使cnn.com及其所有圖像加載在幾秒鐘內,如果你只是去cnn.com –

+0

和cnn.com可能比blackcommentator.com有更好的CDN。目前在CNN.com的主頁上有84張圖片,但並非全部都是400 x 400未優化的jpeg。嘗試一個基準測試,在圖像上執行'file_get_contents()'需要多長時間。如果您的原始基準測試大多數時間沒有被下載消耗,我會很驚訝。 –

回答

6

使用curl保存圖像,但在並行運行curl請求 - 這種方式將加載更快(瓶頸不是帶寬,它的建立請求的時間,所以這將幫助)。一旦你保存圖像到本地目錄,然後運行getimagesize()所有這些。

+0

curl命令將完成這個任何想法? (在PHP中) –

+1

從這裏開始:http://us.php.net/curl-multi-init –

+0

@FrankFarmer我不知道這些,謝謝! – Tim

0

對於初學者,請在本地緩存圖像。您將通過網絡拖拉55次。下載圖像的開銷大大超過了查找寬度和高度的實際時間。

如果您正在討論尋找55 不同的圖片的大小,您可能會考慮在一定程度上對您的代碼進行並行處理。你可能花盡可能多的時間建立連接正在傳輸的實際數據,由於在同一時間下載一個圖像可能是隔靴搔癢飽和你的互聯網連接,你站在運行兩個併發進程字面上雙倍的性能。繼續提高併發性,直到您停止看到性能提升。

+0

但是,即使有55個不同的圖像(因此下載是必須的),它仍然很慢...上面的代碼只是一個例子,沒有任何意義 –

+1

沒有辦法。您正在通過網絡獲取圖片,這是*網絡*速度緩慢。如果您無法在本地獲取圖像,則除了安裝更快的Internet連接之外,無法提供幫助。 – meagar