Dobrze wykonany ttfb test pokazuje, czy serwer odpowiada szybko, czy tylko tak wygląda na pierwszy rzut oka. W praktyce to jeden z najprostszych sposobów, żeby odróżnić problem w sieci, CDN, backendzie albo bazie danych. Poniżej rozkładam temat na części: jak mierzyć TTFB, jak czytać wynik i co naprawdę skraca czas do pierwszego bajtu.
Najpierw sprawdź, czy opóźnienie siedzi w sieci, CDN czy backendzie
- TTFB mierzy czas od wysłania żądania do otrzymania pierwszego bajtu odpowiedzi HTML.
- Wynik obejmuje nie tylko sam serwer, ale też DNS, połączenie, TLS i ewentualne przekierowania.
- Za dobry punkt odniesienia najczęściej przyjmuje się około 0,8 s, a powyżej 1,8 s zwykle zaczynają się realne problemy.
- Jednorazowy test jest sygnałem, ale dopiero powtórzenia i porównanie lokalizacji pokazują prawdziwy obraz.
- Najczęściej najszybciej pomagają: usunięcie przekierowań, cache HTML i odciążenie backendu.
Czym jest TTFB i co naprawdę mierzy
TTFB, czyli Time To First Byte, to czas potrzebny na dotarcie pierwszego bajtu odpowiedzi od serwera do przeglądarki. To nie jest czas pełnego wczytania strony i nie jest to też wyłącznie „szybkość hostingu” w wąskim sensie. W tej jednej liczbie mieszają się elementy sieciowe i serwerowe, dlatego traktuję ją jako wskaźnik kondycji całej ścieżki żądania, a nie tylko jednego miejsca w infrastrukturze.
W praktyce na TTFB składają się między innymi: wyszukiwanie DNS, zestawienie połączenia TCP, negocjacja TLS przy HTTPS, przekierowania, czas dotarcia do serwera oraz czas, jaki backend potrzebuje na przygotowanie odpowiedzi. Jeśli odpowiedź idzie przez CDN, dochodzi jeszcze pytanie, czy treść została podana z brzegu sieci, czy CDN musiał sięgnąć do originu. To właśnie dlatego dwa serwisy na tym samym hostingu mogą mieć zupełnie inne wyniki.
Ja patrzę na TTFB jak na pierwszy test zdrowia całego stosu. Jeśli ten etap jest wolny, dalsze optymalizacje frontendu nie naprawią źródła problemu. Kiedy już wiadomo, co mierzy metryka, można sensownie ocenić sam wynik.
Jak odczytuję wynik pomiaru bez nadinterpretacji
Nie traktuję jednej liczby jako wyroku. Znaczenie wyniku zależy od lokalizacji użytkownika, jakości łącza, użytego CDN, typu strony i tego, czy mówimy o stronie głównej, artykule, sklepie czy aplikacji z dynamicznym renderowaniem. Mimo to przy audytach trzymam się prostego punktu odniesienia, bo bez niego łatwo wpaść w chaos interpretacyjny.
| Zakres TTFB | Jak to czytam | Co sprawdzam najpierw |
|---|---|---|
| Do 0,8 s | W większości przypadków wynik jest dobry i nie powinien sam z siebie blokować odczucia szybkości. | Czy problemem nie jest już renderowanie, obrazki albo skrypty. |
| 0,8-1,8 s | Strefa ostrzegawcza. Strona może działać poprawnie, ale część użytkowników już to odczuwa. | Przekierowania, cache, obciążenie backendu i lokalizację serwera. |
| Powyżej 1,8 s | Zwykle mówimy o realnym problemie wydajnościowym lub sieciowym, a nie o kosmetyce. | Origin, baza danych, kolejki, brak cache albo zbyt daleka lokalizacja odpowiedzi. |
W danych laboratoryjnych pojedynczy odczyt bywa mylący, bo zależy od jednego testu, jednego serwera i jednej lokalizacji. W danych z rzeczywistych sesji patrzę raczej na rozkład wyników niż na średnią z jednego pomiaru. Jeśli na przykład strona w Polsce ładuje się dobrze, ale z innych regionów świata już nie, to problem nie leży wyłącznie w kodzie. Wtedy liczy się geografia, routing i sposób podawania treści.
To ważne również dlatego, że słaby TTFB często odbija się na kolejnych metrykach, zwłaszcza na tym, kiedy pojawia się pierwszy widoczny element strony. Do diagnozy potrzebuję więc jeszcze odpowiedniego narzędzia i porównywalnych warunków.

Jak wykonać pomiar w praktyce
Jeśli mam opisać ttfb test w jednym zdaniu, to jest to szybki sposób na sprawdzenie, gdzie dokładnie giną pierwsze milisekundy odpowiedzi. Najlepszy efekt daje połączenie kilku narzędzi, bo każde pokazuje trochę inny wycinek prawdy. Jedne są dobre do diagnozy pojedynczego problemu, inne do oceny realnych użytkowników, a jeszcze inne do szybkiego sprawdzenia serwera z terminala.
| Narzędzie | Do czego służy | Kiedy je wybrać |
|---|---|---|
| Chrome DevTools | Pokazuje kaskadę żądań, czasy odpowiedzi i szczegóły konkretnej wizyty. | Gdy chcę zobaczyć, czy problem wynika z przekierowań, DNS albo odpowiedzi originu. |
| PageSpeed Insights | Łączy wyniki laboratoryjne z danymi od realnych użytkowników. | Gdy chcę sprawdzić, czy problem faktycznie dotyka odbiorców. |
| WebPageTest | Umożliwia test z wielu lokalizacji i bardziej szczegółowy podgląd waterfall. | Gdy porównuję regiony, CDN albo różne konfiguracje cache. |
curl |
Daje szybki, techniczny odczyt z terminala. | Gdy chcę sprawdzić surową odpowiedź bez szumu przeglądarki. |
| Logi CDN i originu | Pokazują cache hit ratio i czas odpowiedzi backendu. | Gdy podejrzewam, że problem siedzi w zapleczu, a nie w przeglądarce. |
Przy szybkim sprawdzeniu często używam takiego polecenia:
curl -o /dev/null -s -w "dns: %{time_namelookup}\nconnect: %{time_connect}\nssl: %{time_appconnect}\nfirst_byte: %{time_starttransfer}\ntotal: %{time_total}\n" https://twojadomena.pl/Ten wynik nie zastąpi testu z wielu lokalizacji, ale dobrze pokazuje, czy problem jest po stronie połączenia, czy raczej samego serwera. W praktyce to najlepszy sposób na szybki sanity check, zanim zacznie się głębsza analiza. Sam pomiar jednak niewiele daje, jeśli nie wiadomo, co w środku zwalnia.
Skąd bierze się wysoki TTFB
Najczęściej winny nie jest jeden spektakularny błąd, tylko suma drobnych opóźnień. Właśnie dlatego w audycie rozbijam TTFB na warstwy: sieć, CDN, origin i aplikację. Jeśli każda z nich dokłada po kilkadziesiąt lub kilkaset milisekund, końcowy wynik robi się słaby, choć pojedynczy element wygląda niegroźnie.
| Źródło opóźnienia | Jak się objawia | Co zwykle oznacza |
|---|---|---|
| Łańcuch przekierowań | Wynik rośnie, zanim w ogóle pojawi się właściwa strona. | Za dużo skoków między http, https, www i wersją kanoniczną. |
| DNS i połączenie | Widać narzut jeszcze przed wysłaniem właściwej odpowiedzi. | Problemy z resolverem, odległością lub zestawianiem połączenia. |
| Brak trafienia w cache | Jedne wejścia są szybkie, inne wyraźnie wolniejsze. | CDN albo reverse proxy nie podaje gotowego HTML-a. |
| Wolny backend | Serwer długo milczy, zanim wyśle pierwszy bajt. | Ciężkie zapytania do bazy, locki, kolejki, generowanie treści na żywo. |
| Duża odległość od serwera | Wyniki psują się szczególnie dla użytkowników spoza kraju lub regionu. | Origin jest za daleko albo routing jest nieoptymalny. |
| Cold start | Pierwsze żądanie po przerwie jest zauważalnie wolniejsze. | Dotyczy zwłaszcza środowisk serverless, funkcji edge i autoskalowania. |
W tej części łatwo popełnić jeden błąd: obwinić hosting za wszystko. Czasem hosting jest tylko miejscem, w którym widać problem, a nie jego źródłem. Jeśli backend czeka na bazę danych, API albo zewnętrzny serwis, sam mocniejszy serwer niewiele da. Dopiero wtedy wybieram poprawkę, zamiast zgadywać.
Co realnie skraca czas do pierwszego bajtu
Najpierw wyciskam te zmiany, które dają największy efekt przy najmniejszym ryzyku. Z własnego doświadczenia wiem, że najbardziej opłaca się usuwać opóźnienia strukturalne, a nie próbować „przykrywać” ich dodatkowymi wtyczkami czy kosmetyką frontendu.
- Usuwam zbędne przekierowania i porządkuję adresy. Jeden poprawny skok jest akceptowalny, łańcuch kilku już zwykle nie.
- Włączam cache HTML tam, gdzie to możliwe. Dla treści statycznych albo półstatycznych to najprostsza droga do wyraźnego spadku TTFB.
- Przenoszę odpowiedź bliżej użytkownika, czyli korzystam z CDN i sensownie ustawionego edge cache.
- Odchudzam backend przed wysłaniem nagłówków. Wolne zapytania SQL, ciężkie obliczenia i niepotrzebne integracje zwykle bolą najbardziej.
- Dbam o bazę danych. Indeksy, ograniczenie liczby zapytań i eliminacja locków potrafią skrócić odpowiedź bardziej niż zmiana samego hostingu.
- Sprawdzam cold start w serverless i edge functions. Jeśli pierwsze żądanie po bezruchu jest najgorsze, trzeba to uwzględnić w architekturze.
- Używam nowoczesnego transportu, czyli HTTP/2 lub HTTP/3, ale bez złudzeń. Pomagają w połączeniach i wielowątkowości, lecz nie naprawią wolnej logiki aplikacji.
Jedna rzecz, którą często muszę prostować: kompresja, minifikacja i ciężka optymalizacja frontendu nie rozwiązują problemu TTFB. One wpływają głównie na transfer po pierwszym bajcie, a nie na moment jego wysłania. Jeśli pierwszy byte przychodzi za późno, trzeba przyjrzeć się serwerowi, cache i drodze do originu. Po tych zmianach najważniejsze jest już nie samo przyspieszenie, ale sprawdzenie, czy poprawa dotyczy wszystkich użytkowników, a nie tylko jednego testu.
Co sprawdzam najpierw, gdy wynik nadal jest zbyt wysoki
Gdy wynik wciąż wygląda źle, idę zawsze tą samą kolejnością. To oszczędza czas, bo zamiast skakać między narzędziami, szybko zawężam obszar problemu.
- Sprawdzam ten sam adres kilka razy i porównuję wyniki z tej samej lokalizacji.
- Patrzę, czy różni się cache hit od cache miss.
- Weryfikuję, czy nie ma łańcucha przekierowań między wersją domeny, protokołem i końcówką adresu.
- Porównuję stronę główną z podstroną, która generuje się dynamicznie.
- Oddzielam czas odpowiedzi originu od czasu sieciowego, jeśli korzystam z CDN.
- Testuję z punktu widzenia użytkownika z Polski i, jeśli to ma sens, także z dalszej lokalizacji.
Jeśli TTFB jest dobry lokalnie, ale wyraźnie gorszy poza krajem, zwykle problemem nie jest sam kod strony, tylko lokalizacja serwera albo strategia dystrybucji treści. Jeśli jest źle wszędzie, wracam do backendu, bazy i cache, bo tam najczęściej uciekają najcenniejsze milisekundy. Tę kolejność stosuję dlatego, że pozwala przejść od objawu do przyczyny bez zgadywania i bez przypadkowych zmian, które nie mają szans pomóc.