Base64 görsel ne zaman kullanılmalı?

Base64 görselleri (data URI) ikon, küçük logo ve arayüz grafiği gibi birkaç kilobaytlık küçük görsellerde ve ayrı dosyanın mümkün olmadığı durumlarda (tek dosyalık HTML sayfaları, JSON verileri, internetsiz açılan belgeler) kullan. Fotoğraflarda, büyük görsellerde ve birçok sayfada ortak kullanılan görsellerde kullanma: Base64 boyutu yaklaşık yüzde 33 artırır ve görsel artık tek başına önbelleğe alınamaz.

5 dk okuma

Temel kural

Ayrı bir isteğin maliyeti fazladan baytların maliyetinden büyükse görseli göm. Günümüzün HTTP/2 ve HTTP/3 bağlantılarında ek istekler ucuzdur, bu yüzden o nokta erken gelir: görsel başına 2 ile 4 KB iyi bir çalışma sınırıdır. Yaygın build araçları da aynı fikirde; Vite varsayılan olarak 4 KB altındaki dosyaları, webpack'in asset modülleri de 8 KB altındakileri gömer.

Aşağıdaki araç PNG'yi (ya da herhangi bir görseli) data URI'ye çevirir. Görseli bırak ya da aç, sonra Kopyalama biçimi'nden birini seç: Data URI, düz Base64, hazır bir CSS background-image satırı, genişlik ve yükseklikli bir HTML img etiketi ya da Markdown. Araç data URI boyutunu ve dosyadan ne kadar büyük olduğunu gösterir, sonuç sayfayı yavaşlatacak kadar büyükse uyarır. Görseller tarayıcında çevrilir, hiçbir yere yüklenmez.

Burada dene: PNG'den Base64'e

Aracın tam sayfasını aç

Görseli gömünce ne olur

data:image/png;base64,iVBORw0KGgo... gibi bir data URI, görselin baytlarını ona başvuran HTML, CSS ya da JSON'un içine koyar. Tarayıcı görseli o dosyayla birlikte alır, ayrı bir indirme olmaz. Bütün fayda budur. Maliyetler de aynı gerçekten doğar:

  • Boyut: Base64 3 baytı 4 karakterle yazar, görsel yaklaşık üçte bir büyür. Sunucudaki gzip ya da Brotli sıkıştırması aktarımda bunun bir kısmını geri kazanır ama tamamını değil; zaten sıkıştırılmış görsellerde (PNG, JPG, WebP) kazanç azdır.
  • Önbellek: ayrı bir görsel dosyası bir kez önbelleğe alınır ve her sayfada yeniden kullanılır. Gömülü görsel ise sadece içinde durduğu dosyanın parçası olarak önbelleğe girer. CSS'te tek satır değiştir, gömülü bütün ikonlar yeniden iner.
  • Görüntülemeyi bekletme: CSS ilk boyamayı bekletir. Stil dosyasına gömülen her kilobayt görsel, o görseller sayfanın çok aşağısında olsa bile ekranda bir şey görünmesini geciktirir.
  • Tembel yükleme yok: loading="lazy" ve srcset ile cihaza göre görsel seçmenin anlamı kalmaz, çünkü baytlar sayfayla birlikte zaten gelmiştir.
  • Bakım: uzun bir Base64 metni kod incelemesinde okunmaz ve hatalı bir kopyalamayla kolayca bozulur.

Boyut rehberi: gömmeli mi, ayrı dosya mı?

GörselTipik dosya boyutuBase64 olarakÖneri
16 ile 24 px arayüz ikonu (PNG ya da SVG)200 bayt ile 1 KByaklaşık 0,3 ile 1,4 KBGöm, ideal durum
Küçük logo ya da rozet2 ile 5 KByaklaşık 2,7 ile 6,7 KBTek sayfada ya da e-posta imzasında kullanılıyorsa göm, yoksa dosya
Fotoğraf için bulanık yer tutucu300 bayt ile 1 KByaklaşık 0,4 ile 1,4 KBGöm, gerçek fotoğrafı dosya olarak yükle
Her sayfada kullanılan logo10 ile 30 KByaklaşık 13 ile 40 KBAyrı dosya, bir kez önbelleğe alınsın
Ürün fotoğrafı ya da büyük kapak görseli50 ile 500 KByaklaşık 67 ile 670 KBTembel yüklemeli ya da preload'lu ayrı dosya

Base64 görselin işe yaradığı yerler

  • CSS'teki küçük ikonlar: oklar, onay işaretleri, özel bir onay kutusu ya da açılır listedeki ok gibi, stillerle birlikte görünmesi ve sonradan belirmemesi gereken parçalar.
  • Tek dosyalık çıktılar: diskten açıldığında ya da tek ek olarak gönderildiğinde çalışması gereken bir HTML rapor, dışa aktarılmış bir fatura, bir doküman sayfası ya da prototip.
  • API'ler ve veritabanları: JSON'da ikili veri türü yoktur; bu yüzden API istek ve yanıtlarındaki görseller (imzalar, profil fotoğrafları, taranmış belgeler, bazı pazaryeri entegrasyonlarındaki ürün görselleri) çoğu zaman Base64 metni olarak gönderilir.
  • Düşük kaliteli yer tutucular: HTML'e gömülen minik bulanık bir sürüm, asıl görsel yüklenirken anında görünür.
  • SVG ikonlar: SVG zaten metindir, çoğu zaman Base64'e hiç gerek yoktur. Araçtaki Base64 yerine URL kodlama seçeneği SVG'yi okunur tutar ve genelde daha kısa sonuç verir.

Ne zaman kaçınmalı

  • Fotoğraflar ve web sayfasında kabaca 10 KB'ı geçen her görsel. WebP ya da AVIF biçiminde normal bir dosya kullan; genişlik ve yükseklik ver, ilk ekranın altındakileri tembel yükle.
  • Sayfanın en üstündeki en büyük görsel (LCP öğesi). Büyük bir gömülü görsel HTML'in kendisini ağırlaştırır ve içindeki her şeyi geciktirir; ayrı bir dosyayı preload etmek genelde daha hızlıdır.
  • Sayfalar arasında tekrar eden görseller, örneğin site logosu ya da arka plan deseni. Burada önbellek, bir istek kazanmaktan daha değerlidir.
  • Geniş kitleye giden HTML e-postalar. Birçok e-posta istemcisi data URI görselleri göstermez; en bilinenleri Gmail ve Windows için Outlook. Bunun yerine sunucuda barındırılan görseller ya da içerik kimliğiyle (CID) başvurulan ekler kullan. Gömülü data URI'ler çoğunlukla Apple Mail'de ve bazı mobil uygulamalarda çalışır; bülten için bu yeterli değil.
  • Genel olarak çok büyük data URI'ler. Eski Internet Explorer 8 bunları 32 KB ile sınırlıyordu; güncel tarayıcılar çok daha büyüklerini kabul eder ama performans herhangi bir sınıra gelmeden çok önce bozulur.

Doğru yapmanın yolu

Görseli çevirmeden önce küçült. Kazandığın her bayt data URI'de 4/3 ile çarpılır; PNG ikonları sıkıştır, gösterildiği boyuttan büyük görselleri yeniden boyutlandır, JSON verisi gibi gömmek zorunda olduğun fotoğraflarda makul kalitede JPG ya da WebP kullan. Bu sitedeki görsel sıkıştırıcı ve boyutlandırıcı bunu tarayıcıda yapar, küçülen dosyayı buraya geri getirebilirsin.

Boyutları ekle. Genişliği ve yüksekliği olmayan bir img etiketi, görsel göründüğünde sayfanın zıplamasına yol açar. Bu aracın HTML çıktısı bu yüzden görselin gerçek genişlik ve yüksekliğini içerir.

Kaynak dosyayı sakla. Asıl PNG ya da SVG'yi projende tut, data URI'yi ondan üret; ister build aracınla, ister bir şey değiştiğinde bu araçla. Base64 metnini asla ana kopya sayma.

Ölç. Sayfayı gömülü görsellerle ve onlarsız, tarayıcının Ağ (Network) panelinde ya da Lighthouse ile karşılaştır. CSS ya da HTML dosyası belirgin büyüyor ama hiçbir şey hızlanmıyorsa ayrı dosyaya dön.

Adım adım

  1. Görseli eklePNG, JPG, SVG ya da başka bir görseli araca bırak veya cihazından aç.
  2. Boyuta bakData URI boyutunu ve dosyadan ne kadar büyük olduğunu oku. Sayfayı yavaşlatacak kadar büyükse uyarı çıkar.
  3. Çıktıyı seçKopyalama biçimi'nden Data URI, Base64, CSS, HTML ya da Markdown'ı seç. SVG için daha kısa sonuç istersen Base64 yerine URL kodlama'yı aç.
  4. Kopyala ve yapıştırKodu kopyala; stil dosyana, şablonuna, JSON'una ya da README dosyana yapıştır.

Sık sorulan sorular

Base64 görseller dosyalardan daha mı hızlı?

Sadece çok küçük görsellerde, kabaca 2 ile 4 KB altında; orada bir istek kazanmak fazladan boyuttan daha önemlidir. Daha büyük görsellerde ayrı dosya daha hızlıdır ve önbelleğe alınabilir.

Base64 görsel ne kadar büyür?

Asıl dosyadan yaklaşık yüzde 33 daha büyük, çünkü 3 bayt 4 karakter olur. 3 KB'lık bir ikon yaklaşık 4 KB'lık metne dönüşür.

Base64 görseller e-postada çalışır mı?

Güvenilir şekilde değil. Gmail ve Windows için Outlook başta olmak üzere birçok istemci data URI görselleri göstermez. E-postada barındırılan görselleri ya da CID eklerini kullan.

Base64 görsel SEO'ya zarar verir mi?

Doğrudan değil, ama gömülü görselin kendi adresi yoktur; açıklayıcı adlı normal bir dosya gibi görsel aramalarında çıkması pek olası değildir. Ağırlaşan HTML de sayfayı yavaşlatır. Bulunmasını istediğin görseller için normal dosya kullan.

Burada çevirdiğim görsel bir yere yükleniyor mu?

Hayır. Görsel tarayıcında okunur ve çevrilir, hiçbir sunucuya gönderilmez. Araç ücretsizdir; sayfa bir kez açıldıktan sonra internetsiz de çalışır.

Base64 metnini tekrar görsele çevirebilir miyim?

Evet. Base64 metnini ya da data URI'nin tamamını aynı araca yapıştır. Görsel önizlenir, İndir doğru uzantıyla kaydeder.