2026'da Görsel Optimizasyonu: AVIF, WebP ve Tembel Yükleme

Modern görsel optimizasyonu için pratik rehber: AVIF vs WebP, responsive srcset, tembel yükleme stratejileri. Daha hızlı siteler için DigiForge önerileri.

DFDigiForge EkibiJul 20, 20268 dk okuma
Koyu arka planda, görsel sıkıştırmayı temsil eden soyut parlayan küp, etrafında responsive çerçeveler

Görseller, çoğu web sayfasındaki en ağır öğeler olmaya devam ediyor. DigiForge'da yaptığımız yapılarda, görsellerin bir sayfanın toplam ağırlığının önemli bir kısmını oluşturduğunu sıkça görüyoruz. 2026 itibarıyla ortam netleşti: AVIF ve WebP, başvurulması gereken iki modern biçim; srcset ile duyarlı görseller artık olmazsa olmaz ve tembel yükleme o kadar standart hale geldi ki yanlış yapmak performansı gerçekten olumsuz etkileyebiliyor. Bu makale, saha deneyimimizi her projeye uygulayabileceğiniz net ve görüşlü bir iş akışına dönüştürüyor.

Doğru Biçimi Seçmek: AVIF ve WebP

Yıllar boyunca WebP, yeni nesil biçim olarak ilk tercihti. AVIF daha sonra geldi ve daha iyi sıkıştırma ile HDR desteği vaat etti, ancak daha yüksek kodlama maliyeti ve hâlâ evrensel olmayan tarayıcı desteğiyle (Safari son direnen oldu). 2026'daki durum şöyle:

  • AVIF, aynı algısal kalite için genellikle WebP'den daha küçük dosya boyutları sunar. 10 bit renk, HDR, kayıpsız alfa ve hatta animasyonu destekler. Kodlaması WebP'ye göre önemli ölçüde yavaştır, bu da onu gerçek zamanlı üretim için daha az uygun ancak derleme zamanında hazırlanan statik varlıklar için ideal kılar.
  • WebP, tüm modern tarayıcılarda evrensel olarak desteklenir. Öngörülebilir kalite, hızlı kodlama ve mükemmel araçlar (cwebp, sharp, imagemin) sunar. Kodlama hızının önemli olduğu içerik ağırlıklı siteler için WebP hâlâ pragmatik varsayılandır.
  • JPEG XL (JXL) erken vaatler göstermişti ancak hiçbir zaman tarayıcı desteği kazanamadı. Chromium bayrağını kaldırdı ve Safari hiçbir zaman uygulamadı. Ortam değişene kadar bununla zaman kaybetmeyin.

Önerimiz: WebP yedekli AVIF sunun. Tarayıcıların önce AVIF'i, ardından WebP'yi ve en son orijinal JPEG/PNG'yi seçmesine izin vermek için <picture> kullanın. Bu, AVIF'i destekleyenler için sıkıştırmayı en üst düzeye çıkarırken hiç kimseyi boş bırakmaz. Çoğu modern tarayıcı AVIF'i destekler, bu nedenle yedek önemlidir ancak birincil yol değildir.

<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="...">
</picture>

DigiForge ipucu: Her görseli aynı kalitede kodlamayın. Fotoğraflar için daha düşük bir kalite ayarı genellikle görsel olarak kayıpsız görünürken dosya boyutunu önemli ölçüde azaltır. Keskin metinler ve düz renkler içeren ekran görüntüleri veya UI öğeleri için kaliteyi artırın veya kayıpsız WebP kullanın. Her görsel türü için en uygun noktayı bulmak üzere Squoosh gibi araçlarla test edin.

Duyarlı Boyutlar: Sadece srcset Değil

srcset özelliği sizes ile birlikte iyi bilinir, ancak denetlediğimiz birçok uygulamada sizes yanlış kullanılıyor. Tarayıcı, hangi srcset adayını indireceğine karar vermek için sizes'ı kullanır – bu sadece bir öneri değildir. Eksik bir sizes varsayılan olarak 100vw alır, bu da tarayıcının küçük bir ekranda bile en büyük görseli seçmesine ve bant genişliğini boşa harcamasına neden olabilir.

Görselin görüntü alanıyla birlikte ölçeklendiği basit duyarlı görseller için şu şekilde yazın:

<img src="image-800.jpg" 
     srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
     sizes="(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 33vw"
     alt="...">

Ancak burada bir incelik var. sizes, her kesme noktasında görselin kapladığı gerçek CSS genişliğini yansıtmalıdır, görüntü alanı oranını değil. Her zaman tam genişlikte olan bir kahraman görseli için sizes="100vw" doğrudur. Galeride her görsel satırın üçte birini kaplıyorsa 33vw kullanın. Görselin dolgusu varsa veya maksimum genişliği olan bir kapsayıcının içindeyse, gerçek işlenen genişliği hesaplamanız gerekir — bazen sizes içinde calc() kullanmak gerekebilir.

Genişlik Tanımlayıcıları ve Piksel Yoğunluğu

Düzenle birlikte görüntüleme boyutu değişen esnek görseller için w tanımlayıcıları (ör. 400w) ve sizes kullanın. Yoğunluk tanımlayıcıları (1x, 2x) yalnızca logolar veya simgeler gibi sabit boyutlu görseller için uygundur; burada fiziksel boyutları tam olarak bilirsiniz. İçerik görselleri için her zaman w kullanın – bu, tarayıcıya görüntü alanı genişliği ve cihaz piksel oranına göre en iyi adayı seçme esnekliği verir.

Biçim seçimi için <picture> kullanırken, her <source> kendi srcset ve isteğe bağlı sizes özniteliğine sahip olmalıdır. Düzen aynıysa aynı sizes değerini kaynaklar arasında paylaşabilirsiniz, ancak gereksiz yere tekrarlamaktan kaçının.

Tembel Yükleme: Yerel, Intersection Observer veya Her İkisi?

Yerel tembel yükleme (loading="lazy"), 2020'den beri tüm büyük tarayıcılarda desteklenmektedir. Sıfır JavaScript gerektirir, resimler ve iframe'lerle çalışır ve en kolay yoldur. Ancak pratikte önemli olan bazı tuhaflıkları vardır:

  • Yerel tembel yükleme, tarayıcı öğeyi görüntü alanına yakın olarak değerlendirene kadar yüklemeyi erteler. Eşik değeri tarayıcı tanımlıdır – Chrome erken yüklemeye başlamak için cömert bir kenar boşluğu kullanır; Firefox daha küçük bir kenar boşluğu kullanır. Bu, Firefox'ta resimlerin beklenenden daha geç yüklenebileceği anlamına gelir.
  • Bazı eski uygulamalarda srcset ile mükemmel çalışmaz. Eski Safari sürümlerinde (16.4 öncesi) hatalar vardı. 2026'da bunlar nadirdir ancak yine de test etmeye değer.
  • <picture> öğeleri için loading="lazy", <source> etiketlerinde değil, <img> etiketinde olmalıdır.

Biz hibrit bir yaklaşım kullanıyoruz: temel olarak yerel tembel yükleme ve eski tarayıcılar için hafif bir Intersection Observer (IO) polyfill (2026'da bu nadir bir durum olsa da). IO ayrıca solma animasyonlarını tetikleyebilir veya düşük kaliteli yer tutucuları yükleyebilir. Uygulamamız:

const lazyImages = document.querySelectorAll('img[loading="lazy"]');

if ('loading' in HTMLImageElement.prototype) {
  // Native lazy loading works – do nothing extra
} else {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const img = entry.target;
        img.src = img.dataset.src;
        observer.unobserve(img);
      }
    });
  });
  lazyImages.forEach(img => observer.observe(img));
}

İlk görünür resmi tembel yüklemeyin. Ekranın üst kısmındaki başlangıç kahraman resmi loading="eager" ile yüklenmeli veya bu öznitelik tamamen atlanmalıdır. Ekran üstünde tembel yükleme, LCP'yi (En Büyük İçerikli Boya) olumsuz etkiler çünkü tarayıcı kritik kaynağı getirmeyi geciktirir. En azından ilk içerik resmini her zaman eager olarak işaretleriz.

Hepsini Bir Araya Getirmek: Pratik Bir İş Akışı

DigiForge'da, ister statik bir site, ister CMS tabanlı bir site, isterse bir web uygulaması olsun, her projede şu iş akışını izliyoruz:

  1. Kaynak resimler: Tasarımcılar yüksek çözünürlüklü PNG veya TIFF olarak teslim eder. Orijinalleri, yeni biçimler ortaya çıkarsa gelecekte yeniden sıkıştırmak için _originals klasöründe saklarız.
  2. Biçim oluşturma: AVIF, WebP ve yedek JPEG/PNG'yi 3–5 genişlikte (ör. 480, 800, 1200, 1920) üretmek için sharp ile bir Node.js betiği veya ImageMagick ile bir Makefile kullanırız. Büyük projelerde, derlemeyi hızlandırmak için bunu worker thread'leri kullanarak paralel olarak çalıştırırız.
  3. Kalite ayarlama: Dosya boyutunu algısal bir metrikle (SSIM veya Butteraugli) karşılaştıran CI kontrolleri çalıştırırız. Tipik bir sayfanın toplam resim ağırlığı, içerik türüne göre makul bir eşiği aşarsa pull request'i engelleriz.
  4. İşaretleme: type sıralamasıyla (AVIF, WebP, yedek) <picture> ve loading="lazy" (ilk kahraman resmi hariç) ile <img> oluştururuz. Duyarlı boyutlar için, sizes değerini gerçek CSS'e göre üretiriz – bu genellikle tasarım ve geliştirme arasında paylaşılan bir tasarım token dosyasından gelir.
  5. CDN'den sunma: Statik siteler için, uzun önbellek başlıklarıyla (ör. Cache-Control: public, max-age=31536000, immutable) önceden kodlanmış varlıkları bir CDN'den sunarız. Cloudinary veya imgix gibi bir resim CDN'si kullanılıyorsa, birçok adım URL dönüşümleriyle otomatikleştirilir, ancak soğuk başlatma maliyetlerini önlemek için kritik resimleri yine de önceden kodlarız.

Unsplash [3] ve Pixabay [1] gibi siteler, genellikle birkaç megabayt ham ağırlığında yüksek çözünürlüklü resimler sağlar. İş akışımız, bunları sıfır algılanabilir kayıpla önemli ölçüde küçültür. Benzer şekilde, ChatGPT Images [4] gibi araçlardan üretilen yapay zeka resimleri genellikle optimizasyon yapılmadan yüksek çözünürlükte gelir; bu nedenle aynı sıkıştırma iş akışından geçirilmeleri çok önemlidir. Shutterstock [5] veya Bing Images [2]'den alınan stok resimler de benzer özelliklere sahiptir – optimize edilmezse performansı düşürebilecek büyük dosyalar.

Sık Gördüğümüz (ve Düzelttiğimiz) Tuzaklar

  • sizes özelliğinin tamamen eksik olması: Tarayıcı, 100vw varsayımıyla srcset içindeki en büyük adayı indirir. Her zaman sizes belirtin – basit bir 100vw bile hiç yoktan iyidir.
  • Her şey için JPEG kullanmak: Birçok ekip hâlâ tek format olarak JPEG sunuyor. 2026'ya kadar bunun için bir mazeret yok – WebP ve AVIF olgunlaştı ve bunları eklemek için gereken çaba minimum düzeyde.
  • Aşırı tembel yükleme: loading="lazy" ile işaretlenen her görsel, ilk anlamlı boyamayı geciktirir. Kritik görseller için loading="eager" kullanın ve maksimum LCP hızı için kahraman görselini <link rel="preload" as="image" href="..."> ile önceden yüklemeyi düşünün.
  • Animasyonlu formatlar için yedek olmaması: Desteği sınırlı olan animasyonlu AVIF kullanıyorsanız, <picture> ile bir WebP veya GIF yedeği sağlayın.
  • Sunucusuz fonksiyonlarda görselleri anında kodlamak: AVIF kodlaması CPU yoğunlukludur. Bir talep patlaması zaman aşımına veya maliyet artışına neden olabilir. Önceden pişirilemeyen kullanıcı yüklemeli görseller dışında, derleme sırasında her zaman önceden varlık oluşturun.

Ayrıca ekiplerin sürümlendirme yapmadan tek bir görsel kaynağına güvendiğini de gördük. Bir tasarımcı kahraman banner'ını güncellediğinde, eski dosyanın üzerine yazılır ve CDN önbelleği bozulur. Dosya adlarında içerik hash'leri kullanın (ör. hero-a1b2c3.avif), böylece yeni sürümler yeni bir URL alır ve eskileri süresiz olarak önbelleğe alınabilir.

Araç Önerileri

CLI tercih eden geliştiriciler için cwebp (libwebp'den) ve avifenc (libavif'ten) sağlam ve scriptlenebilir. Node.js iş akışları için sharp rakipsizdir – hızlıdır, tüm formatları işler ve AVIF çıktısı verebilir (AVIF desteğiyle derlenmiş libvips gerektirir). Anlık karşılaştırmalar için Squoosh veya icdif (Image Compare Diff) gibi compare araçlarını kullanıyoruz.

Büyük ölçekli projeler için Cloudinary, imgix veya Fastly’nin Image Optimizer’ı gibi bir görsel CDN’si kullanmayı düşünün. Bunlar, URL parametreleri aracılığıyla yeniden boyutlandırma ve biçim anlaşmasını otomatikleştirir ve genellikle AVIF kodlamayı kendi önbellek katmanlarında gerçekleştirir, böylece kaynak sunucunuzda CPU maliyeti ödemezsiniz. Ancak, kilitlenme ve maliyet konusunda dikkatli olun – çok sayıda görsel içeren bir site için aylık fatura önemli olabilir. Sıkça hibrit bir yaklaşım öneriyoruz: en yaygın boyutları ve biçimleri önceden oluşturun ve nadir kırılma noktaları veya kullanıcı yüklemeleri için CDN’nin devreye girmesine izin verin.

Bir CMS veya statik site oluşturucu kullanıyorsanız, çoğu çerçeve için eklentiler mevcuttur (örneğin, Next.js için @next/image, Gatsby için gatsby-plugin-sharp, Eleventy için eleventy-img). Bunlar, oluşturma ve işaretlemeyi otomatik olarak halleder, ancak yine de varsayılan kalite ayarlarını gözden geçirmenizi öneririz – şikayetleri önlemek için genellikle muhafazakârdırlar (kayıpsız veya kayba yakın), bu da bayt israfına neden olabilir.

Alt Satır

2026'da görsel optimizasyonu ödünleşimlerle ilgilidir: AVIF en fazla bayt tasarrufu sağlar ancak CPU maliyeti yüksektir; WebP güvenilir orta yoldur. Duyarlı boyutlar yaklaşık değil, kesin olmalıdır. Tembel yükleme neredeyse otomatiktir, ancak LCP'yi olumsuz etkilememek için düşünceli bir şekilde uygulanmalıdır. İyi ayarlanmış bir görsel hattı, sayfa ağırlığını önemli ölçüde azaltabilir – bu, kullanıcı deneyimi, Core Web Vitals ve dönüşüm oranları için doğrudan bir kazançtır.

Ayda on milyonlarca optimize edilmiş görsel sunan siteler için hatlar oluşturduk. İlkeler ölçekten bağımsız olarak aynıdır: derleme zamanında kodlayın, zarif bir şekilde geri dönüş yapın, duyarlı boyutlandırın ve tembel ama açgözlü olmayan bir şekilde yükleyin. Mevcut görsel stratejinizi denetlemek veya bir hat uygulamak için yardıma ihtiyacınız varsa, DigiForge ile iletişime geçin – genellikle ilk geçişte sayfa ağırlığını önemli ölçüde azaltabiliriz.

#görsel-optimizasyonu#avif#webp#responsive-görseller#tembel-yükleme#core-web-vitals
DF

DigiForge Ekibi

DigiForge mühendislik ekibi — modern web siteleri, modules ve otomasyonlar inşa ediyor; hızlı ve dayanıklı web ürünleri yayınlama zanaatı üzerine yazıyor.

Konuşalım

Aklınızda bir proje
mi var?

Bize ne geliştirdiğinizi anlatın — ürününüz için net bir plan ve doğru yaklaşımı belirleyelim.

Projenizi başlatın