Bir görüntü dosyasını yüklemek vs Base 64 kodlamak

6 Cevap php

Ben onlar base64 kodlanmış olacak bir sql veritabanından benim görüntüleri almak almak zorunda nerede Yani php şey üzerinde çalışıyorum. Bu görüntüleri görüntüleme hızı önemlidir bu yüzden hızlı bir görüntü dosyasına veritabanı verileri açmak ve daha sonra tarayıcıda yükleyin, ya da sadece ham base64 veri ve kullanımı yankı olacağını olmadığını anlamaya çalışıyorum:

<img src="data:image/jpeg;base64,/9j/4AAQ..." />

Firefox ve diğer Gecko tarayıcılarda desteklenir Hangi.

Yani Özetle, gerçek bir görüntü dosyası ya da base64 kodu transfer hızlı olacaktır. Görüntüleri yüklemek için ajax kullanarak zaman daha az http isteği gerektirir?

Görüntüler fazla 100 piksel toplam olacaktır.

6 Cevap

Peki ben size herkes aynı fikirde değilim. Daha fazla ve daha fazla görüntü yüklemek ettik durumlar vardır. Tüm sayfaları tüm 3 görüntüler içeriyor. Aslında 200'den fazla resim yüklemek ettik bir site üzerinde çalışıyorum. 100000 kullanıcıların isteği ne olur bu çok yüklü bir sitede 200 görüntüler. Görüntüleri dönen sunucu diskler, daraltmak gerekir. Daha da kötüsü yerine base64 biri sunucuya çok fazla istek yapmak ettik. Çok küçük ben base64 gösterimini, veritabanında önceden kaydedilmiş tercih ederim. I-http://www.stoimen.com/blog/2009/04/23/when-you-should-use-base64-for-images/ da solüsyonu ve güçlü bir argüman bulundu. Adam bu durumda gerçekten ve bazı testler yapılır. Ben etkilendim ve de benim testleri yapmak oldu. Diyor gibi gerçektir. Çok görsel bir sayfada yüklenen için sunucudan bir yanıt gerçekten yararlıdır.

Veri :/ / çalışır IE7 veya aşağıdaki sanmıyorum.

Bir görüntü istendiğinde daha sonra daha sonra o hizmet dosya sistemine kaydetmek olabilir. Veritabanı değişiklikleri görüntü verileri sonra sadece dosyayı silmek. Çok img.domain.com gibi başka bir etki alanından servis yapın. Eğer çok gerekli olmadıkça PHP başlatmak zorunda kalmadan web sunucusu ücretsiz olarak tüm son değişiklik faydaları, ya da e-etiketleri alabilirsiniz.

Eğer apache kullanıyorsanız:

# If the file doesn't exist:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(image123).jpg$ makeimage.php?image=$1

Modifiye olmayacak, neden tekrar ve tekrar görüntüyü yeniden. 1000 farklı koşullara dayalı gösterilecek 1000 farklı olası görüntüler olsa bile, varsayımsal, ben hala disklerde 1000 görüntüleri daha iyi olduğunu düşünüyorum. Unutmayın, disk tabanlı görüntüleri tarayıcı tarafından önbelleğe ve bant genişliği vs vs tasarruf edilebilir

Bu çok hızlı ve kolay bir çözüm. Görüntü boyutu base64 anlamlı http isteklerinin sayısını azaltacak kullanarak, boyutu yaklaşık% 33 artacak rağmen.

Google görüntüleri ve Yahoo görüntüleri base64 kullanarak ve görüntüleri inline hizmet vermekteyiz. Kaynak kodunu kontrol edin ve bunu görürsünüz.

Of course there are drawbacks on this approach, but I believe the benefits outweighs the costs. A cons I have found is in slow devices. For example, In iPhone 3GS the images served by google images are very slow to render, since the images come gziped from the server and must be uncompressed in the browser. So, if the customer has a slow device, he will suffer a little when rendering the images.

Genellikle, base64 kodlaması kullanılarak yaklaşık 1/3 bayt boyutunu artırmak için gidiyor. Bu nedenle, sunucunun içine veritabanından 1/3 bayt taşıyın ve sonra tarayıcıya tel üzerinden bu ekstra Aynı 1/3 bayt taşımak zorunda olacak.

Görüntünün boyutu büyüdükçe Tabii ki, sözü edilen genel orantılı olarak artacaktır.

Söyleniyor, ben db kendi bayt gösterimleri içine dosyaları değiştirmek ve bu iletmek için iyi bir fikir olduğunu düşünüyorum.

Eğer hızlı hız istiyorsanız, o zaman onlar yüklenirken modifiye / diske yazmak ve web sunucusu statik dosyalara hizmet izin vermelisiniz. Onlar php çağırma en aza indirmek Rojoca önerileri, çok iyi. Başka bir etki alanından hizmet veren bir ek bir yararı (en) tarayıcılar paralel istekleri sorun olacaktır.

Eğer verileri sorgulamak zaman modifiye, sonra diske yazmak ve oradan hizmet son kontrol, tüm bu engelleme. Eğer saygı emin olmak isteyeceksiniz If-Modified-Since başlığında gereksiz yere veri aktarmak kalmamak.

Eğer disk veya diğer bazı önbellek yazamıyor, o veritabanında ikili veri olarak depolamak ve bunu akışı hızlı olacaktır. Tampon boyutlarını ayarlayarak bu noktada yardımcı olacaktır.