WebP resimlerini kullan

Katie Hempenius
Katie Hempenius

Bu konu neden önemli?

WebP resimleri, JPEG ve PNG'dekilerden daha küçüktür. Bu da genellikle dosya boyutunda% 25-35'lik bir küçülmeye yol açar. Bu, sayfa boyutlarını küçültür ve performansı artırır.

WebP; JPEG, PNG ve GIF resimleri için mükemmel bir alternatiftir. Ek olarak, WebP hem kayıpsız hem de kayıplı sıkıştırma sunar. Kayıpsız sıkıştırmada veri kaybı olmaz. Kayıplı sıkıştırma, resim kalitesinin düşmesi pahasına dosya boyutunu küçültür.

Resimleri WebP'ye dönüştürün

Kullanıcılar, görsellerini WebP'ye dönüştürmek için genellikle şu yaklaşımlardan birini kullanır: cwebp komut satırı aracı veya Imagemin WebP eklentisi (npm paketi). Projenizde derleme komut dosyaları veya derleme araçları (ör.Webpack veya Gulp) kullanılıyorsa Imagemin WebP eklentisi genellikle en iyi seçenektir. CLI ise basit projelerde veya görüntüleri yalnızca bir kez dönüştürmeniz gerekiyorsa resimleri yalnızca bir kez dönüştürmeniz gerektiğinde genellikle en iyi seçenektir.

Resimleri WebP'ye dönüştürdüğünüzde çok çeşitli sıkıştırma ayarları yapabilirsiniz. Ancak çoğu kişi için önem vermeniz gereken tek şey kalite ayarıdır. 0 (en kötü) ile 100 (en iyi) arasında bir kalite seviyesi belirleyebilirsiniz. Bu konuda denemeler yapabilirsiniz. Resim kalitesi ile dosya boyutu arasında ihtiyaçlarınıza uygun dengenin hangisi olduğunu bulmak için bu değeri kullanabilirsiniz.

cwebp kullanma

cwebp'nin varsayılan sıkıştırma ayarlarını kullanarak tek bir dosyayı dönüştürün:

cwebp images/flower.jpg -o images/flower.webp

50 kalite düzeyini kullanarak tek bir dosyayı dönüştürün:

cwebp -q 50 images/flower.jpg -o images/flower.webp

Bir dizindeki tüm dosyaları dönüştürme:

for file in images/*; do cwebp "$file" -o "${file%.*}.webp"; done

Imagemin'i kullan

Imagemin WebP eklentisini tek başına veya en sevdiğiniz derleme aracıyla (Webpack/Gulp/Grunt/vb.) kullanabilirsiniz. Bu işlem genellikle, derleme aracınızın yapılandırma dosyasına veya derleme komut dosyasına yaklaşık 10 satır kod eklemeyi içerir. Webpack, Gulp ve Grunt için bunu nasıl yapacağınıza dair örnekleri burada bulabilirsiniz.

Bu derleme araçlarından birini kullanmıyorsanız Imagemin'i Düğüm komut dosyası olarak tek başına kullanabilirsiniz. Bu komut dosyası, images dizinindeki dosyaları dönüştürüp compressed_images dizinine kaydeder.

const imagemin = require('imagemin');
const imageminWebp = require('imagemin-webp');

imagemin(['images/*'], {
  destination: 'compressed_images',
  plugins: [imageminWebp({quality: 50})]
}).then(() => {
  console.log('Done!');
});

WebP resimleri yayınla

Siteniz yalnızca WebP uyumlu tarayıcıları destekliyorsa okumayı durdurabilirsiniz. Aksi takdirde, WebP'yi yeni tarayıcılara, eski tarayıcılara da yedek resim sunun:

Önce: html <img src="flower.jpg" alt="">

Sonra: html <picture> <source type="image/webp" srcset="flower.webp"> <source type="image/jpeg" srcset="flower.jpg"> <img src="flower.jpg" alt=""> </picture>

<picture>, <source> ve <img> etiketleri (birbirlerine göre nasıl sıralandıkları dahil) bu nihai sonucu elde etmek için birbirleriyle etkileşime girer.

<picture>

<picture> etiketi, sıfır veya daha fazla <source> etiketi ve bir <img> etiketi için bir sarmalayıcı sağlar.

<source>

<source> etiketi bir medya kaynağı belirtir.

Tarayıcı, desteklediği bir biçimdeki ilk listelenen kaynağı kullanır. Tarayıcı, <source> etiketlerinde listelenen biçimlerden hiçbirini desteklemiyorsa <img> etiketinde belirtilen resmi yüklemeye devam eder.

<img>

<img> etiketi, bu kodun <picture> etiketini desteklemeyen tarayıcılarda çalışmasını sağlar. Bir tarayıcı <picture> etiketini desteklemiyorsa desteklemediği etiketleri yoksayar. Dolayısıyla, yalnızca <img src="flower.jpg" alt=""> etiketini "görür" ve bu resmi yükler.

HTTP Accept üst bilgisini okuma

Yeniden yazma isteklerine olanak tanıyan bir uygulama arka ucunuz veya web sunucunuz varsa desteklenen alternatif resim biçimlerinin reklamını yapmak için HTTP Accept üst bilgisinin değerini okuyabilirsiniz:

Accept: image/webp,image/svg+xml,image/*,*/*;q=0.8

Bu istek başlığını okumak ve yanıtı içeriğine uygun şekilde yeniden yazmak, resim işaretlemenizi basitleştirme yararınıza olur. <picture> işaretlemesi, çok sayıda kaynakla birlikte oldukça uzun olabilir. Aşağıda, WebP alternatifleri sunabilecek bir Apache mod_rewrite kuralı bulunmaktadır:

RewriteEngine On
RewriteCond %{HTTP:Accept} image/webp [NC]
RewriteCond %{HTTP:Content-Disposition} !attachment [NC]
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f [NC]
RewriteRule (.+)\.(png|jpe?g)$ $1.webp [T=image/webp,L]

Bu yöntemi tercih ederseniz önbelleklerin resmin çeşitli içerik türleriyle yayınlanabileceğini anlamasını sağlamak için HTTP Vary yanıt üst bilgisini ayarlamanız gerekir:

<FilesMatch ".(jpe?g|png)$">
  <IfModule mod_headers.c>
    Header set Vary "Content-Type"
  </IfModule>
</FilesMatch>

Yukarıdaki yeniden yazma kuralı, istenen JPEG veya PNG resminin WebP sürümünü arar. Bir WebP alternatifi bulunursa uygun Content-Type başlığıyla yayınlanır. Bu, otomatik WebP desteğiyle resim işaretlemeyi aşağıdakine benzer şekilde kullanmanıza olanak tanır:

<img src="flower-320w.jpg" srcset="flower-320w.jpg 320w, flower-640w.jpg 640w, flower-960w.jpg 960w">

WebP kullanımını doğrulayın

Sitenizdeki tüm resimlerin WebP kullanılarak sunulduğunu doğrulamak için Lighthouse kullanılabilir. Lighthouse Performans Denetimi'ni (Lighthouse > Seçenekler > Performans) çalıştırın ve Resimleri yeni nesil biçimlerde sunma denetiminin sonuçlarını bulun. Lighthouse, WebP'de sunulmayan tüm görüntüleri listeler.