PHP resim resized görüntüleri depolamak vs anında yeniden boyutlandırmak

4 Cevap php

Ben bir resim paylaşım sitesi inşa ediyorum ve PHP ile anında görüntü yeniden boyutlandırma ve yeniden boyutlandırılmış görüntüleri depolanmış olan artılarını ve eksilerini bilmek istiyorum.

Hangi hızlıdır?

Hangisi daha güvenilir?

Hız ve performans iki yöntem arasındaki uçurum ne kadar büyük?

Iki şekilde görüntüler görünümleri gibi veya hotlinking vb izin eğer .. ben yeniden boyutlandırma görüntüleri depolamak için tercih eğer görüntüler için doğrudan bir bağlantı olacak gibi değildir istatistikleri için bir PHP komut dosyası geçmesi unutmayın.

Ben yorum veya konuyla ilgili herhangi bir yararlı bağlantıları takdir edeceksiniz.

4 Cevap

Bu erken optimizasyon gibi geliyor. Eğer sitenizin sunucu (lar) / ne kadar hesaplama homurtu olacak zorunda kaç kullanıcıları biliyor musunuz? Basit (bakım-bilge) seçeneği ile gitmek, yani performans sorunu haline kadar, sonra orada yapmak ne anlamaya, anında yeniden boyutlandırmak.

Onlar defalarca vurdu olması muhtemeldir eğer, senin ölçeklenmis görüntülerin sunucu tarafında önbelleğe çeşit uygulamak için bir fikir olabilir, ama ben bu ihtiyacı kadar açık pre-render olarak uzatmak sanmıyorum.

Dinamik yeniden boyutlandırma görüntüleri ilk boyutuna bağlı olarak pahalı bir işlem (zaman-bilge) olabilir. Ben üretim sistemlerinde bunu yaptık, ama seçim var, ben şiddetle diske önbelleğe lehine. Sonuçta, disk alanı ucuz ve yükleme süresi Web üzerinde her şeydir. Hatta belirli bir boyutta sadece önbellek minik varsa ve başka her yerde dinamik boyutlandırma yapmak, büyük ölçüde galeri tarzı görüntü listeleri için yükleme süreleri azaltabilir.

This is absolutely incomparable matters.

Anında yeniden boyutlandırma, aslında, kendi sunucusu üzerinde bir DoS saldırısı koşma gibidir. Normalden görüntü yeniden boyutlandırma php script normalden isteği hizmet daha fazla CPU ve RAM gerektirir. O ZATEN performansı üzerinde büyük bir etkisi var. Yine her zamanki küçük ama sayıları, yalnız vizyonda. Yani, on veya daha fazla bir faktör ile sunucu yükü artan, ağır yük işlemleri onlarca oluştururken yalnızca bir galeri sayfası gösteren ederken.

Quick and dirty test to prove my words: Let's try to resize relatively small, 1,3 megapixel image

$ /usr/bin/time --format="%MK mem %Es CPU time" /usr/bin/convert angry_birds_1280x800.jpg -resize 100x100 thumb.jpg
10324K mem 0:00.10s CPU time

Bu 10 resim önizleme CPU zaman bütün bir saniye kadar yiyebilirim gösteren, bize 0,1 saniye sürdü, o yüzden. Düzgün yazılmış PHP galeri sayfası etrafında 0,01 saniye sürer iken. Yani, sinek üzerinde yeniden boyutlandırma ile 100 faktörü ile sunucu yük artmaktadır.

Bellek ile aynı. Her süreç (bir 100k görüntü dosyasını yeniden boyutlandırmak için!) 100M bir toplamı ile az hafıza 10M daha yemek boyutlandırmak. PHP script olağan bellek sınırı sadece 8M ve nadiren ulaşılır iken.

İşte gerçek hayat sayılardır.

A somewhat funny thing related to this problem:
Exactly the same PHP user who easily throwing away 1000000s of CPU cycles at the same time being incredible jealous to spare 1 or 2! It is not a figure of speech, here is an example on what I am talking about:
A similar question from someone, whose great concern at the same time in as negligible thing as speed difference between Constants, Variables or Variable Arrays. And who recently run into allowed memory size exhausted problem, as though such a disaster was not enough.

Sorular TON ve bu sitede cevaplar ne olursa olsun işlemleri nanosaniye hız farkı tartışıyor vardır, birkaç CPU döngüsü, her bir çekim işlemleri arasında kesinlikle ihmal farkı göstermek için yineleme milyonlarca testleri çalışan, tükenmez onuru ile cevap verdi.

Yazara sadece eşit görünen iki yaklaşım arasında performans açısından büyük, eşsiz farka ilişkin - Ve aynı zamanda bu gibi sorular vardır.

That's the problem with average PHP user and this site.
The former just have no measure to tell real things from microscopic ones.
Yet the latter have no mechanism for sanity check for the questions - every one answered with equal enthusiasm, even if two questions contradicts with each other (and both with common sense).

Ben kuvvetle görüntüleri önbelleğe size tavsiye, ve on-the-fly yeniden boyutlandırmak DEĞİL.

görüntülerin yeniden boyutlandırılması sunucu için çok tüketen yoğun işlemci ve bellek.

Eğer anında ölçek gidiyor görüntüleri bir galeri varsa, sayfa 3-10 saniye gibi bir şey söylemek, yavaş yavaş görüntüleri yüklemek için gidiyor, orijinal dosya boyutu bağlıdır.

When resizing it takes about 3 bytes pr pixel of your memory. So If you have an image 1000x1000 to be resized, it will take about 3MB of memory. If your one of your webpages has many of these resize-on-the-fly images, say 20, it will take about 60MB of RAM of your server. Maybe not, since most clients only requests 4 images at the time, but 12MB is still a lot for a pageload. I would only scale on the fly if the source image is less that 100x100 px.

İPUCU: başparmak ölçekleme ve tasarruf için harika bir lib olan PhpThumb