Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Te dwa skróty pojawiają się w raportach obok siebie i bywają używane jak synonimy szybkości strony. To nieporozumienie o dość poważnych konsekwencjach, bo prowadzi do napraw wykonywanych w złym miejscu — na przykład do inwestycji w mocniejszy serwer, gdy problemem jest jeden nieoptymalny obrazek w nagłówku.
Najkrótsze rozróżnienie, jakie znam, brzmi tak: TTFB odpowiada na pytanie „jak szybko serwer zaczął odpowiadać”, a LCP na pytanie „kiedy użytkownik zobaczył treść, po którą przyszedł”. Pierwsza wartość jest zawarta w drugiej, ale stanowi zwykle jej mniejszą część.
Poniżej rozkładam tę zależność na czynniki, podaję progi oceny obu wskaźników i pokazuję, jak z ich zestawienia wyciągnąć decyzję o kolejności prac.
Czas do pierwszego bajtu jest pomiarem sieciowo-serwerowym. Kończy się w momencie, w którym przeglądarka dostaje początek odpowiedzi z dokumentem. Nie mówi nic o tym, co dalej: czy dokument jest duży, czy wymaga dodatkowych plików, czy przeglądarka zdoła coś wyświetlić.
Największe wyrenderowanie treści to pomiar percepcyjny. Przeglądarka obserwuje, jak strona się rysuje, i wskazuje moment, w którym pojawił się największy element widoczny w oknie — najczęściej obrazek główny, blok tekstu albo nagłówek z tłem. Interesuje ją wyłącznie to, co widzi użytkownik nad linią zgięcia, i to w największym rozmiarze.
Konsekwencja arytmetyczna jest oczywista, ale rzadko wypowiadana wprost: LCP nigdy nie będzie lepsze od TTFB. Jeśli serwer zaczyna odpowiadać po sekundzie i ośmiu dziesiątych, żaden zabieg po stronie obrazków nie zejdzie z LCP poniżej tej wartości. To jest podstawa całej strategii napraw.
Dochodzi do tego różnica statusu. LCP jest jednym z podstawowych wskaźników internetowych, branym pod uwagę w ocenie doświadczenia na stronie. TTFB nie jest wskaźnikiem podstawowym — pełni funkcję pomocniczą, diagnostyczną, i służy do wyjaśniania wyniku LCP, a nie do samodzielnej oceny.
Najbardziej praktyczny sposób pracy z tym wskaźnikiem polega na rozłożeniu go na cztery kolejne odcinki czasu. Kiedy raz się je zobaczy, przestaje się zgadywać.
Ten podział rozstrzyga spór o odpowiedzialność szybciej niż jakakolwiek dyskusja. Jeżeli pierwszy odcinek to trzysta milisekund, a całość dwie sekundy i osiemset, serwer nie jest problemem, nawet jeśli tak brzmi pierwsza hipoteza wszystkich zainteresowanych.
Dla LCP przyjęte granice to dwie i pół sekundy dla wyniku dobrego oraz cztery sekundy jako początek wyniku złego. Między tymi wartościami mieści się przedział „wymaga poprawy”. Dla czasu odpowiedzi serwera powszechnie stosowanym punktem odniesienia jest osiemset milisekund dla dobrego rezultatu.
Trzy uwagi, bez których te liczby wprowadzają w błąd.
Po pierwsze, wynik ocenia się na siedemdziesiątym piątym centylu odsłon, czyli patrzymy na doświadczenie trzech czwartych wizyt, a nie na średnią. Średnia potrafi ukryć dużą grupę użytkowników z bardzo słabym wynikiem, bo równoważą ją odsłony z bufora.
Po drugie, urządzenia mobilne i komputery ocenia się osobno i różnica między nimi bywa dwukrotna. Raport, w którym nie wiadomo, którego segmentu dotyczy liczba, nie nadaje się do podejmowania decyzji.
Po trzecie, ocena dotyczy adresów zgrupowanych w zbiory podobnych stron, a nie każdej podstrony osobno. Dlatego karta produktu może być technicznie w porządku, a raport pokazywać problem, bo do tej samej grupy trafiają wyniki wyszukiwania w sklepie.
Najczęstszy układ, z jakim się spotykam, to solidny czas odpowiedzi serwera i słabe LCP. Przyczyny są niemal zawsze te same.
Obrazek główny w rozmiarze przeznaczonym do druku, skalowany przez przeglądarkę. Karuzela na starcie strony, która zaczyna wczytywać pierwszy slajd po zainicjowaniu skryptu. Leniwe wczytywanie założone hurtowo na wszystkie obrazki, w tym na ten najważniejszy, widoczny od razu. Czcionka pobierana z zewnętrznego serwera, przez którą tekst czeka na wyświetlenie. Baner zgód, który zasłania i opóźnia treść. Wreszcie treść budowana w przeglądarce po pobraniu danych z interfejsu programowego — wtedy serwer odpowiada natychmiast, tylko odpowiada niemal pustym dokumentem.
Układ odwrotny, czyli złe TTFB i dobre LCP, jest z definicji niemożliwy w sensie bezwzględnym, bo pierwszy pomiar zawiera się w drugim. Zdarza się natomiast jego pozorna wersja: pomiar laboratoryjny robiony na rozgrzanym buforze pokazuje szybki serwer, a dane od użytkowników mówią co innego, bo w rzeczywistości spora część odsłon trafia na generowanie strony od zera. To najczęstsze źródło rozmowy, w której dwie osoby mają rację, patrząc na dwa różne pomiary.
Rozdział, którego pominięcie kosztuje najwięcej czasu w audytach.
Pomiar laboratoryjny to symulacja: jedno urządzenie, jedno łącze, jedno wczytanie w kontrolowanych warunkach. Nadaje się do szukania przyczyn i sprawdzania, czy poprawka zadziałała, bo jest powtarzalny. Nie nadaje się do stwierdzenia, czy Twoi użytkownicy mają problem, bo nie zna ich urządzeń, sieci ani zachowania.
Pomiar z pola pochodzi od realnych odwiedzających. Ma odwrotne właściwości: mówi, jak jest naprawdę, ale nie mówi dlaczego, i reaguje z opóźnieniem, bo agreguje dane z okresu liczonego w tygodniach. Dlatego po wdrożeniu poprawki nie warto codziennie odświeżać raportu w oczekiwaniu na zmianę.
Ja pracuję tak: stan faktyczny ustalam z danych od użytkowników, przyczynę szukam w narzędziach laboratoryjnych i w rozbiciu LCP na cztery odcinki, a skutek weryfikuję ponownie w danych z pola po kilku tygodniach. Do bieżącej kontroli używam pomiaru wbudowanego we własną stronę, bo daje wynik z tego samego dnia i pozwala patrzeć na konkretne szablony, nie na grupy adresów.
Tu wracamy do arytmetyki z początku tekstu, bo ona wyznacza plan.
Zaczynam zawsze od czasu odpowiedzi serwera, jeśli przekracza akceptowalny poziom. Nie z sympatii do infrastruktury, ale ponieważ ten odcinek jest podłogą, poniżej której LCP nie zejdzie. Optymalizowanie obrazków przy dwusekundowym TTFB to poprawianie części, która nie decyduje o wyniku.
Kiedy pierwszy odcinek jest w porządku, przechodzę do opóźnienia wczytania zasobu — czyli do tego, jak szybko przeglądarka dowiaduje się o istnieniu najważniejszego elementu. To zwykle najtańsze poprawki o największym efekcie: wskazanie priorytetu dla obrazka głównego, wyłączenie leniwego wczytywania dla treści widocznej od razu, przeniesienie plików blokujących renderowanie, ograniczenie zewnętrznych zasobów w nagłówku dokumentu.
Dopiero potem zajmuję się wagą samego zasobu: format obrazu, wymiary dopasowane do rzeczywistego rozmiaru wyświetlania, kompresja. Na końcu zostaje opóźnienie renderowania, które najczęściej oznacza rozmowę o skryptach zewnętrznych i o tym, ile narzędzi analitycznych oraz marketingowych wykonuje się przed pokazaniem treści.
Ostatnia rzecz jest komunikacyjna, ale decyduje o tym, czy poprawki w ogóle powstaną.
Zgłoszenie „strona jest wolna, popraw LCP” jest bezużyteczne i zwykle wraca z odpowiedzią, że serwer ma niskie obciążenie. Zgłoszenie skuteczne wygląda inaczej: podaje konkretny szablon strony, segment urządzeń, wynik z danych od użytkowników, rozbicie na cztery odcinki i wskazanie, który z nich odpowiada za większość czasu. Do tego element zidentyfikowany jako największy oraz jedna rzecz do wykonania.
W tej rozmowie warto też wyraźnie rozdzielić odpowiedzialności, bo to skraca dyskusję. Za czas odpowiedzi serwera odpowiada zespół utrzymania i architektura aplikacji. Za opóźnienie wczytania zasobu i za wagę obrazków odpowiada w dużej mierze warstwa szablonu i redakcja. Za opóźnienie renderowania — ten, kto decyduje o liczbie skryptów wpuszczanych na stronę, a to zwykle marketing, czyli my.
Ostatnie zdanie mówię z pełną świadomością, bo w audytach regularnie znajduję sytuację, w której dział techniczny zrobił swoją część, a wskaźnik nadal jest zły przez narzędzia dołożone od strony marketingowej. Rozdzielenie TTFB i LCP pozwala to pokazać na liczbach, zamiast szukać winnego.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |