İçeriğe geç

Core Web Vitals — Sayfa Ne Zaman Gerçekten Hazır?

Orta 9 dk Sık karşılaşılır

Önce şunu oku: Tarayıcı Nasıl Çizer — Animasyon Neden Takılıyor?

30 saniyede özet

Bir sayfanın hızlı hissettirmesi tek bir sayıyla ölçülmez. LCP ana içeriğin ne zaman göründüğünü, CLS ekranın ne kadar zıpladığını, INP dokunuşa ne çabuk cevap verildiğini ölçer. Her biri ayrı bir sorunun izini sürer.

Bir restorana gittin ve ana yemeğin masaya ne zaman geleceğini merak ediyorsun. Biri yanına sandalye sıkıştırınca tabakların kayıyor mu? Garsonu çağırdığında ne kadar çabuk geliyor?

  1. Bayt: Yeni bankacılık ana sayfası benim makinemde bir saniyede açılıyor. Harika!

  2. Sen: Müşteriler üç şey diyor: geç açılıyor, düğmeye basacakken ekran kayıyor, dokununca tepki yok.

  3. Bayt: Üç ayrı şikâyet... tek bir sorun değil mi?

  4. Bayt: Belki üç ayrı sorun. Her birini ayrı ölçmemiz gerekebilir.

Üç ayrı his

LCPLargest Contentful Paint: ekrandaki en büyük içeriğin ne zaman çizildiği. 2,5 saniye ya da altı iyi sayılır.Sözlükte gör → (Largest Contentful Paint), ekrandaki en büyük içeriğin, çoğu zaman ana görselin, ne zaman çizildiğini ölçer. Kullanıcı için “sayfa açıldı” hissi budur.

CLSCumulative Layout Shift: görünen içeriğin sayfa boyunca ne kadar kaydığı. 0,1 ya da altı iyi sayılır.Sözlükte gör → (Cumulative Layout Shift), görünen içeriğin ne kadar kaydığını ölçer. Geç gelen bir bant her şeyi aşağı iterse, kullanıcı yanlış düğmeye basabilir.

Kafam karıştı, daha basit anlat

LCP: ana içerik ne zaman göründü. CLS: ekran ne kadar zıpladı.

Hızlı kontrolBaşlangıç

LCP neyi ölçer?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

CLS'i en çok ne kötüleştirir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Dokunuşa cevap

Kullanıcı bir düğmeye dokundu ve tıklama işleyicisi 450 milisaniyelik bir hesaplama yapıyor. Ekran bu sürede ne yapar? Cevabı göster

Donar. Tarayıcı JavaScript’i ana thread’de çalıştırır; işleyici bitmeden ekranı yeniden çizemez. Kullanıcı yarım saniye boyunca hiçbir tepki görmez.

Üç ayrı his: göründü mü, zıpladı mı, cevap verdi mi.
Adım adım oku
  1. Ana yemek ne zaman masada? (LCP)
  2. Tabaklar kayıyor mu? (CLS)
  3. El kaldırınca garson ne çabuk gelir? (INP)
  4. Üç ayrı his: göründü mü, zıpladı mı, cevap verdi mi.

INPInteraction to Next Paint: bir dokunuştan ekranın bir sonraki çizimine kadar geçen süre. 200 milisaniye ya da altı iyi sayılır.Sözlükte gör → (Interaction to Next Paint), bir dokunuştan ekranın bir sonraki çizimine kadar geçen süreyi ölçer. Uzun bir iş ana thread’i tuttuğu sürece ekran güncellenemez.

Çare işi bölmektir: önce kullanıcının gördüğü değişikliği yap, ağır hesaplamayı ondan sonra yap. Tarayıcı aradaki boşlukta ekranı çizer.

Kafam karıştı, daha basit anlat

INP: dokunuşa ne çabuk cevap verildi. Uzun işi böl, önce ekranı güncelle.

Hızlı kontrolOrta

Bir tıklama işleyicisi 450 ms süren bir hesaplama yapıyor. INP'yi nasıl iyileştirirsin?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Neden bir sayfa masaüstünde iyi, telefonda kötü ölçülebilir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

Sayfa ne zaman gerçekten hazır?

Tohum 567391
yükleniyor…
Hesap özeti
  • LCP: —

    ana içerik ne zaman göründü

  • CLS: —

    ekran ne kadar zıpladı

  • INP: —

    dokunuşa ne çabuk cevap verdi

Hız
Adım 0

Şu an ne oldu?

Orta seviye telefon · bankacılık ana sayfası

Sayfa yüklenecek, bir kampanya bandı geç gelecek ve kullanıcı bir düğmeye dokunacak.

Görevler0/3

  • Telefonda iki ölçümü kırmızıya düşüraçık

    İpucu

    Varsayılan ayarlar yeter.

  • Hızlı yüklenen ama zıplayan bir sayfa yapaçık

    İpucu

    Görsel ve tıklama iyi, yer ayırma yok.

  • Telefonda üç ölçümü de iyiye getiraçık

    İpucu

    Üç iyileştirme birlikte.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Telefonda hiçbir iyileştirme yok: LCP 5,6 sn ve CLS 0,28 kötü, INP 450 ms sınırda.
  2. “Masaüstü” seç. Aynı sayfa daha iyi görünüyor, ama zıplama hâlâ kötü.
  3. Telefona dön, görseli öne al ve tıklama işini böl. Sayfa hızlı açıldı ve hızlı cevap verdi, ama bant geldiğinde yine zıpladı.
  4. “Geç gelenlere yer ayır”ı da aç. Üç ölçüm de iyi.
Hızlı kontrolOrta

LCP için "iyi" eşiği nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Sayfa hızlı açılıyor ve hızlı cevap veriyor ama kampanya bandı geldiğinde her şey aşağı kayıyor. Hangi ölçüm kötü?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

Yalnızca kendi makinende ölçmek. Güçlü bir bilgisayarda her şey hızlıdır. Ölçümleri gerçek kullanıcıların cihazlarından topla ya da yavaş bir telefonu taklit ederek test et.

Ana görseli tembel yüklemek. loading="lazy" ekranın altındaki görseller içindir. İlk ekrandaki ana görsele uygulanırsa tarayıcı onu geç ister ve LCP kötüleşir.

Yalnızca ilk yüklemeye bakmak. CLS ve INP sayfanın bütün ömrü boyunca ölçülür. Kaydırırken gelen bir reklam ya da yavaş bir menü de puanı düşürür.

Kafam karıştı, daha basit anlat

Gerçek cihazda ölç, ana görseli tembel yükleme, sayfanın bütün ömrüne bak.

Hızlı kontrolOrta

Ana görsele loading="lazy" eklendi. LCP'ye ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aşağıdaki örnek bir bankanın ana sayfasından: öne alınan ana görsel, geç gelen banda ayrılmış yer, bölünmüş bir tıklama işi ve gerçek kullanıcılardan ölçüm.

Derinleş · Bankacılık ana sayfası: LCP, CLS ve INP için üç düzeltme 4 dosya · ~50 satır · ilk okumada atlayabilirsin
Proje dosyaları

src/app/home/ HeroCard.tsx Ana görsel: yüksek öncelikle isteniyor, tembel değil, boyutları belli.

src/app/home/HeroCard.tsx
export function HeroCard({ card }: { card: CardSummary }) {
return (
<img
src={card.imageUrl}
alt={`${card.productName} kartı`}
width={640}
height={400}
fetchPriority="high" // the LCP element: ask for it first
decoding="async"
// no loading="lazy" here: lazy is for images below the fold
/>
);
}

src/app/home/ CampaignSlot.tsx Kampanya bandı: gelmeden önce yeri ayrılmış; geldiğinde hiçbir şey kaymıyor.

src/app/home/CampaignSlot.tsx
export function CampaignSlot({ campaign }: { campaign?: Campaign }) {
// The slot keeps its height before the campaign arrives, so nothing below it moves.
return (
<div className="min-h-[96px]" aria-live="polite">
{campaign ? <CampaignBanner campaign={campaign} /> : null}
</div>
);
}

src/app/home/ SummaryButton.tsx Hesap özeti: önce ekran güncelleniyor, ağır hesaplama tarayıcıya nefes aldırdıktan sonra yapılıyor.

src/app/home/SummaryButton.tsx
function yieldToBrowser(): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, 0));
}
export function SummaryButton({ accountId }: { accountId: string }) {
const [summary, setSummary] = useState<Summary | 'loading' | null>(null);
async function open() {
setSummary('loading'); // 1. visible feedback first
await yieldToBrowser(); // 2. let the browser paint it
setSummary(buildSummary(accountId)); // 3. the heavy work afterwards
}
return (
<button type="button" onClick={open}>
{summary === 'loading' ? 'Hazırlanıyor…' : 'Hesap özeti'}
</button>
);
}

src/app/telemetry/ vitals.ts Ölçüm: web-vitals kütüphanesi gerçek kullanıcıların değerlerini sunucuya gönderiyor.

src/app/telemetry/vitals.ts
import { onCLS, onINP, onLCP, type Metric } from 'web-vitals';
function send(metric: Metric) {
// Field data from real devices, not the developer's laptop.
navigator.sendBeacon('/telemetry/vitals', JSON.stringify({ name: metric.name, value: metric.value, rating: metric.rating }));
}
onLCP(send);
onCLS(send);
onINP(send);

Kendini sına

Şimşek turu1/4

LCP, sayfanın ilk pikselinin ne zaman çizildiğini ölçer.

Soru 1/3İleri

Lighthouse puanı yüksek ama gerçek kullanıcıların INP değerleri kötü. En olası sebep nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 LCP, sayfadaki en büyük içeriğin ne zaman çizildiğini ölçer. Ana görseli erken istemek ve doğru boyutta vermek onu en çok iyileştiren adımlardır.
  2. 2 CLS, görünen içeriğin ne kadar kaydığını ölçer. Görsellere boyut vermek ve geç gelen içeriğe önceden yer ayırmak zıplamayı önler.
  3. 3 INP, bir dokunuşa ne kadar sürede görsel cevap verildiğini ölçer. Uzun işleri bölüp önce ekranı güncellemek tarayıcıyı serbest bırakır.
Sonraki kapı Her şeyi tek bir global store'a koydun, düzenli görünüyor. Neden her tuşta bütün ekran yeniden çiziliyor? State Nerede Yaşamalı? — Bileşen, Üst Bileşen, Context, Cache, URL · 9 dk

4 kart sonraki derste seni bekliyor

0/4 kart bu dersten toplandı

Bu dersin üstüne kurulanlar

Bunlar bu dersi temel alıyor; hazır olduğunda devam edebilirsin.