LCP, INP ve CLS nedir? Web performansı nasıl ölçülür?

Yapay zeka ile özetle:

Bağlantı kopyalandı

Bir sitenin hızlı görünmesi, her kullanıcı için iyi çalıştığı anlamına gelmez. LCP yüklenme deneyimini, INP etkileşimlere yanıtı, CLS ise sayfadaki beklenmedik kaymaları değerlendirir. Laboratuvar ve gerçek kullanıcı verileri ayrı okunmalıdır.

Üç eşik, tek skor değil

Core Web Vitals, Google'ın sayfa deneyimi için öne çıkardığı üç ölçümdür. LCP yüklemeyi, INP etkileşime tepkiyi, CLS görsel kaymayı izler. İyi bir deneyim için hedefler, ziyaretlerin çoğu için konmuştur. web.dev bunu sayfa yüklemelerinin yüzde 75'lik dilimi olarak yazar. Mobil ve masaüstü ayrı okunur. Sayfayı bir kez açıp hızlı bulmak, bu dilimi tutturmak değildir.

LCP ve CLS, 31 Ekim 2024'te güncellenen Web Vitals sayfasında kararlı ölçümdür. INP, 2024'te First Input Delay'in yerine geçen kararlı ölçümdür. Kararlı ölçüm yılda birden fazla değiştirilmez. Yine de kalıcı olmak zorunda değildir. Bu üç sayı, metnin doğru olup olmadığını söylemez. İyi bir yükleme süresi dağınık bir sayfayı düzeltmez. Sırayı da bu yazı vaat etmez.

İyi deneyim için web.dev'in yazdığı eşikler. Yüzde 75'lik dilim içindir.
ÖlçümNe zaman bozulmuş hissedilirHedef
LCPSayfanın asıl içeriği geç belirir2,5 saniye veya daha kısa
INPTıklama, dokunma veya tuştan sonra ekran gecikir200 milisaniye veya daha kısa
CLSOkuduğunuz yer kayar0,1 veya daha düşük

Asıl içerik geç geliyorsa

LCP, ziyaretçi sayfayı açmaya başladıktan sonra görünen alandaki en büyük görselin veya metin bloğunun boyanmasına kadar geçen süredir. Kapak görseli çoğu sayfada bu öğedir. Süreyi tek bir ayarla düzeltmek nadiren yeter. web.dev, ilk HTML belgesine ve LCP öğesinin kullandığı dosyaya birlikte bakılmasını önerir.

İlk baytın gecikmesi, yani TTFB, sunucunun HTML'i geç göndermesidir. Yönlendirmeler, ziyaretçinin sunucuya uzak olması veya önbelleğin kullanılamaması bunu uzatır. TTFB ile ilk içeriğin görünmesi arasındaki uzun ara, tarayıcının boyamadan önce çok sayıda dosya indirdiğini veya içeriğin JavaScript ile kurulduğunu gösterebilir. İlk içerik ile LCP arasındaki uzun ara ise asıl görselin HTML'de hazır olmadığını, betiğin onu sonradan istediğini düşündürür.

LCP görseline loading="lazy" vermek yüklemeyi bilerek geciktirir. web.dev, LCP görselinin asla tembel yüklenmemesini yazar. Görsel HTML'de duruyorsa fetchpriority="high" ile öncelik verilebilir. Bu önceliği çok sayıda görsele vermek işe yaramaz. PageSpeed Insights'ta önce gerçek kullanıcı verisine, yani CrUX bölümüne bakın. Laboratuvar bölümü ancak saha verisiyle aynı yöndeyse teşhis için kullanılır. Bir adresin kendi verisi yoksa araç, sitenin tamamının verisini gösterebilir. Ana sayfa ile bir iç sayfanın LCP'si aynı olmak zorunda değildir.

Kurgusal örnek

Bu örnek bir müşteri kaydı değildir. Bir otelin kapak fotoğrafı sayfanın en büyük öğesidir. Fotoğraf HTML'de yoktur. Sayfa açıldıktan sonra bir betik onu ister, üstüne de tembel yükleme konmuştur. Ziyaretçi birkaç saniye boş bir alan görür. Burada şikâyet sitenin genel yavaşlığı değil, LCP görselinin geç istenmesidir.

Tıklayınca ekran gecikiyorsa

INP, ziyaret boyunca nitelikli etkileşimlere bakar ve en uzun olanı raporlar. Çok sayıda etkileşimde aykırı değerler dışarıda kalabilir. İyi bir deneyim için 200 milisaniye veya altıdır. Lighthouse bu ölçümü, kullanıcı girişi olmayan bir testte alamaz. Laboratuvarda onun yerine Total Blocking Time kullanılır. Laboratuvardaki iyileşme sahadaki INP'yi düzeltebilir. Onun yerine geçmez.

Bir etkileşim üç parçaya ayrılır. Gecikme, ziyaretçi tıkladığında başlar ve olayın işlenmesi başlayana kadar sürer. İşleme, tıklamaya cevap veren kodun çalışma süresidir. Sunum, kod bittikten sonra tarayıcının bir sonraki kareyi ekrana getirmesine kadar olan süredir. Hangi parçanın uzun olduğu bilinmeden kodu küçültmek tahmindir.

  • Giriş gecikmesi

    Sayfa görünmüş olsa bile JavaScript hâlâ çözülüyor olabilir. Ziyaretçi bu sırada tıklarsa, ana iş parçacığı meşgul olduğu için tıklama bekler. Büyük betikler sayfa açılırken uzun görevler üretir.

  • İşleme süresi

    Tıklamanın fonksiyonu, ekranı güncellemeden önce yazım denetimi, sayaç ve kayıt gibi işleri de yapıyorsa kare gecikir. Görsel güncellemeyi hemen yapmak, geri kalanı sonraki göreve bırakmak web.dev'in önerdiği ayrımdır.

  • Sunum gecikmesi

    Çok büyük bir DOM, bir sonraki karenin boyanmasını uzatır. JavaScript ile büyük HTML parçaları üretmek de aynı maliyeti taşır. Yavaşlık bir iframe'in içindeyse, bakılacak ana iş parçacığı sayfanın kendisi değil o çerçevenin iş parçacığıdır.

Kurgusal örnek

Bu örnek bir müşteri kaydı değildir. Bir katalog sayfasında filtreye basılınca liste, yazım denetimi ve bir kayıt isteği aynı fonksiyonun içinde çalışır. Ziyaretçi düğmenin yarım saniye sonra tepki verdiğini görür. Ölçüm INP'dir. İlk bakılacak yer, düğmenin görüntüyü güncellemeden önce ne kadar iş yaptığıdır.

Okurken satır kayıyorsa

CLS, görünür içeriğin beklenmedik biçimde yer değiştirmesidir. web.dev'in sık yazdığı nedenler, boyutsuz görseller, geç gelen reklam ve gömülü içerik, yerleşimi bozan animasyonlar ve yazı tipi değişimidir.

Görsele veya videoya genişlik ve yükseklik vermemek, tarayıcının yer ayırmasını dosya inene kadar erteler. CSS ile genişliği yüzde yüz, yüksekliği otomatik yapmak da aynı boşluğu bırakır. width ve height, ya da aspect-ratio, yerin önceden açılmasını sağlar. Reklam, harita, video gömüsü ve sonradan eklenen bantlar da aynı şekilde itebilir. Geç gelen içerik için min-height veya aspect-ratio ile yer ayırın. Reklam gelmezse ayrılan yeri kapatmak, içeriği sonradan itmek kadar kayma üretir. Yeri ayıramıyorsanız, sonradan gelen içeriği sayfanın daha altına almak kaymanın etkisini azaltır.

top ve left ile yapılan animasyon yerleşimi kaydırır. transform ile yapılan taşıma, CLS'e yazılmaz. Web fontu gelince yedek fontun yerini alması da satırları oynatır. Yedek font, asıl fonta yakın bir aileden seçilir. font-display: optional, font ilk yerleşimden önce yetişmezse yazı tipini değiştirmeden devam edebilen bir yoldur.

Ziyaretçinin kendi tıkladığı bir yüklemeden sonraki 500 milisaniye içindeki kayma CLS'e yazılmaz. Daha fazla ürün yükle gibi bir düğme bu yüzden, haber vermeden üstten inen bir banttan farklıdır.

Laboratuvar skorunu saha sanmayın

PageSpeed Insights'ın üst bölümü gerçek Chrome kullanıcılarının verisidir. Alt bölüm laboratuvardır. İkisi ayrılıyorsa, saha verisi deneyimi anlatır. Laboratuvar, nedeni görmek için kullanılır. Kendi gerçek kullanıcı ölçümünüz, CrUX'un vermediği sayfa ayrıntısını tamamlar. JavaScript ile okunan değer, CrUX raporuyla aynı çıkmak zorunda değildir.

Bu ölçüler sayfanın ne söylediğini değiştirmez. Metin, form ve teklif site ve yazılım işinin içinde kalır.

  • Şikâyet yükleme mi, tıklama sonrası bekleme mi, yoksa kayma mı.
  • PageSpeed Insights'ta baktığınız sayı bu adresin kendi verisi mi, sitenin tamamının ortalaması mı.
  • LCP öğesi hangisi. Görsel HTML'de mi, yoksa betik onu sonradan mı istiyor. Tembel yükleme var mı.
  • INP'de geciken etkileşim hangisi. Süre girişte mi, fonksiyonda mı, bir sonraki karede mi birikiyor.
  • Kaynağın boyutu var mı. Geç gelen bant veya reklam için yer ayrılmış mı. Animasyon top ve left ile mi yapılıyor.

Kaynaklar