CometWebWydajność / Core Web Vitals

Obraz LCP i zarezerwowane miejsce: test w przeglądarce

Maciej Zmitrukiewicz · Pakiet badania do artykułu Jak przyspieszyć stronę? 7 napraw, pomiary i Core Web Vitals

To materiał do artykułu. We wrześniu 2026 zrobiłem dwa małe eksperymenty na sztucznej stronie testowej, żeby pokazać dwa mechanizmy: późno odkryty obraz opóźnia LCP, a obraz bez wymiarów przesuwa układ. Niżej są wszystkie wyniki, warunki testu i skrypt, którym go powtórzysz.

Na co patrzyłem

W pierwszym eksperymencie obraz był w HTML od początku albo skrypt wstawiał jego adres dopiero po 650 ms. W obu wariantach obraz miał wymiary. W drugim eksperymencie ten sam obraz pojawiał się po 650 ms w obu wariantach, a różniła je tylko obecność atrybutów width i height. Opóźnienie 650 ms wybrałem sam, żeby zasymulować późno odkryty obraz, więc nie mówi nic o skali problemu na prawdziwej stronie.

Każdy wariant uruchomiłem pięć razy w dwóch widokach, 390 × 844 i 1280 × 900 px, co daje 40 prób. Strona testowa trafiała do przeglądarki bez serwera, a obraz PNG o wymiarach 800 × 400 px (15 918 bajtów, wzór pikseli zamiast zdjęcia) był osadzony bezpośrednio w HTML jako data:. Dzięki temu porównanie zależy tylko od zmienianego elementu, ale w teście nie ma sieci, transferu ani cache. Każda próba startowała w świeżym kontekście przeglądarki, a kolejność wariantów zmieniałem na przemian.

Po wczytaniu strony skrypt obserwował ją przez 1,1 s. LCP to ostatni wpis largest-contentful-paint, liczony od startu dokumentu w przeglądarce. CLS to największe okno sesji przesunięć, czyli przesunięcia oddalone od siebie o mniej niż sekundę w oknie do 5 s, bez tych tuż po działaniu użytkownika. Tak obie metryki definiuje web.dev (LCP, CLS).

Wyniki

EksperymentWariantWidokPróbyLCP: mediana (min–max)CLS: mediana
Odkrycie obrazuobraz po 650 ms390 px5704 ms (700–720)0
Odkrycie obrazuobraz od razu390 px560 ms (56–60)0
Odkrycie obrazuobraz po 650 ms1280 px5700 ms (696–700)0
Odkrycie obrazuobraz od razu1280 px564 ms (56–68)0
Miejsce na obrazbez wymiarów390 px5708 ms (700–728)0,127
Miejsce na obrazz wymiarami390 px5708 ms (696–720)0
Miejsce na obrazbez wymiarów1280 px5712 ms (700–836)0,109
Miejsce na obrazz wymiarami1280 px5708 ms (700–908)0

Obraz dostępny od razu dał LCP około 60 ms zamiast około 700 ms. Wymiary obrazu sprowadziły CLS do zera, ale LCP został przy 708 ms, bo obraz dalej czekał na ten sam timer. W tabeli są wszystkie ukończone próby, łącznie z wolniejszymi, a pełne wartości CLS znajdziesz w plikach JSON.

Czego te dane nie pokażą

Pliki

Żeby powtórzyć test, zapisz skrypt jako lab/run_lab.py, zainstaluj Playwright z Chromium i Pillow, a potem uruchom go z --experiment lcp i drugi raz z --experiment cls. Ja używałem Chromium 144, Playwright 1.57, Pythona 3.13 i Pillow 12.3, a czasy u ciebie będą trochę inne.

Formularze do własnych pomiarów są w materiałach do artykułu.

Wróć do artykułu