Optimalizácia TTFB: Kompletný sprievodca rýchlou odozvou servera v roku 2026

Praktický sprievodca skrátením TTFB pod 800 ms cez edge CDN, HTTP/3, 103 Early Hints a streaming SSR. Konkrétne konfigurácie pre Cloudflare, Nginx a Next.js 15.

Optimalizácia TTFB: Sprievodca 2026

Aktualizované: 24. júna 2026

Optimalizácia TTFB (Time to First Byte) znamená skrátiť čas, ktorý uplynie od odoslania požiadavky prehliadača po príchod prvého bajtu odpovede zo servera, ideálne pod 800 ms pre 75. percentil návštev podľa oficiálnej definície web.dev. V praxi to dosiahnete kombináciou edge cachovania na CDN, znížením doby spracovania na origin serveri, nasadením HTTP/3, využitím 103 Early Hints a streamovaním HTML namiesto čakania na kompletný render. Tak poďme na to. V tomto sprievodcovi prejdeme každý z týchto pilierov s reálnymi konfiguráciami a kódom pre rok 2026.

  • Dobrý TTFB je pod 800 ms (75. percentil); zlý nad 1800 ms. Meria sa cez Chrome UX Report (CrUX), nie izolovane v Lighthouse.
  • TTFB nie je oficiálny Core Web Vital, ale priamo stropom pre LCP. Bez rýchleho TTFB sa pod 2,5 s LCP nedostanete.
  • Najväčší skok prináša edge cachovanie HTML na CDN (Cloudflare, Vercel, Fastly). Z 1200 ms na 50 ms je realistické.
  • HTTP/3 nad QUIC eliminuje head-of-line blocking a šetrí 100 až 300 ms na nadviazaní spojenia oproti TCP+TLS 1.3.
  • Hlavička 103 Early Hints umožňuje preload kritických zdrojov ešte pred 200 OK a posiela LCP dole o 100 až 400 ms.
  • Streaming SSR (React 19, Next.js 15, Astro 5) pošle prvý bajt do 50 ms aj pri pomalých databázových volaniach.

Čo je TTFB a aká hodnota je dobrá?

TTFB (Time to First Byte) je interval medzi začiatkom navigácie a okamihom, keď prehliadač prijme prvý bajt hlavičky HTTP odpovede pre hlavný dokument. Zahŕňa DNS lookup, TCP handshake, TLS negotiation, čakanie na server (server think time) a čas potrebný na presmerovania. Google ho meria cez PerformanceNavigationTiming.responseStart mínus activationStart.

Oficiálne prahy podľa web.dev pre rok 2026:

  • Dobré: ≤ 800 ms (75. percentil reálnych návštev)
  • Vyžaduje zlepšenie: 800 až 1800 ms
  • Slabé: > 1800 ms

Tu je dôležitý nuance. TTFB nie je samostatný Core Web Vital, je však tvrdým stropom pre optimalizáciu LCP. Ak váš server odpovedá za 1,5 sekundy, LCP pod 2,5 sekundy je matematicky takmer nemožný (prehliadač potrebuje ešte čas na parsing HTML, fetch CSS a vykreslenie obrazu). Preto sa TTFB v praxi rieši ako prvý krok pred ostatnými metrikami.

Prečo je moje TTFB také vysoké?

Vysoké TTFB má štyri typické príčiny, ktoré sa často kombinujú. Po prvé, pomalý origin server, najčastejšie kvôli nezacachovaným databázovým dotazom, N+1 problémom alebo synchronnému volaniu externých API počas server-side renderingu. Druhý vinník sú geografická vzdialenosť a chýbajúci edge cache: ak je váš server v Európe a používateľ v Austrálii, samotná latencia siete pridá 250 až 300 ms ešte pred prvým bajtom.

Tretia veľká kategória sú zbytočné presmerovania. Reťazec http://example.com → https://example.com → https://www.example.com znamená tri kompletné requesty s troma DNS+TCP+TLS handshakemi. Štvrtá je blokujúce middleware, čiže autentifikačné kontroly, A/B testing rozhodnutia alebo edge funkcie, ktoré bežia synchrónne pred každou odpoveďou.

Úprimne, na Slovensku navyše pozorujeme špecifický problém: mnoho e-shopov a mediálnych webov používa shared hosting v Nemecku alebo Česku bez CDN, čo pri každej požiadavke z mobilnej siete prinesie 80 až 150 ms RTT navyše. V jednom projekte som túto vec riešil presunom statického HTML na Cloudflare Pages a TTFB klesol z 1,1 s na 60 ms cez noc. Práve preto je nasadenie globálnej CDN siete prvý krok s najlepším pomerom úsilia a výsledku.

Ako správne merať TTFB v roku 2026

TTFB v Lighthouse v izolovanom teste z laboratórnej siete nemá veľkú výpovednú hodnotu, lebo neodráža reálnu geografiu vašich používateľov. Pre seriózne meranie použite kombináciu týchto zdrojov:

  • Chrome UX Report (CrUX): agregované 28-dňové percentily z reálnych Chrome používateľov. Dostupné cez PageSpeed Insights, BigQuery alebo CrUX API.
  • Real User Monitoring (RUM): vlastné meranie cez web-vitals knižnicu. Je to jediný spôsob, ako vidieť TTFB rozdelený podľa krajiny, sieťovej technológie alebo typu zariadenia.
  • WebPageTest: presné rozdelenie TTFB na DNS, TCP, TLS a server think time z viacerých geografických lokácií.

Minimálny RUM snippet pre rok 2026 vyzerá takto:

// app/layout.tsx, nainštalujte: npm install web-vitals
import { onTTFB } from 'web-vitals/attribution';

onTTFB((metric) => {
  // metric.value je TTFB v ms
  // metric.attribution obsahuje rozpis: dnsTime, connectionTime, requestTime
  navigator.sendBeacon('/api/rum', JSON.stringify({
    name: 'TTFB',
    value: metric.value,
    rating: metric.rating, // 'good' | 'needs-improvement' | 'poor'
    dnsTime: metric.attribution.dnsTime,
    connectionTime: metric.attribution.connectionTime,
    requestTime: metric.attribution.requestTime,
    url: location.pathname,
  }));
});

CDN a edge cachovanie ako prvý krok

CDN je jediná zmena s desaťnásobným efektom na TTFB. Princíp je jednoduchý: HTML, ktoré sa medzi používateľmi nelíši (alebo sa líši predvídateľne), uložte do cache na edge uzloch blízko používateľa. Cloudflare má v roku 2026 viac ako 330 lokácií, Vercel približne 40 regiónov, Fastly cez 90. Latencia z najbližšieho POP je typicky 5 až 30 ms namiesto 100 až 300 ms z origin servera.

Pre dynamický obsah, ktorý sa nedá kompletne cachovať, využite stale-while-revalidate. Používateľ dostane okamžite staršiu verziu, kým CDN na pozadí načíta čerstvú:

// Cloudflare Workers / Vercel / Netlify Edge
export async function GET(request: Request) {
  const response = await fetch(originUrl);
  const headers = new Headers(response.headers);

  // Cache na edge 60 sekúnd, povol stale odpoveď ďalších 24 hodín
  headers.set(
    'Cache-Control',
    'public, max-age=0, s-maxage=60, stale-while-revalidate=86400'
  );

  return new Response(response.body, { headers });
}

Pre personalizovaný obsah (prihlásený používateľ, košík) použite cache key splitting alebo edge personalization cez Cloudflare Workers alebo Vercel Edge Middleware. Statickú časť stránky cachujte globálne, dynamickú časť dotiahnite cez fragment alebo ESI. Tento prístup posiela prvý bajt do 30 až 80 ms aj pre prihlásených používateľov.

HTTP/3, QUIC a 0-RTT obnovenie spojenia

HTTP/3 beží nad QUIC protokolom (UDP + TLS 1.3 + multiplexing), nie nad TCP. V júni 2026 ho podporuje približne 32 % top 10 miliónov stránok podľa W3Techs a všetky veľké prehliadače vrátane Chrome, Safari a Firefoxu ho majú zapnuté default. Detaily špecifikuje RFC 9114.

Tri kľúčové prínosy pre TTFB:

  1. Skombinovaný handshake: TLS plus transport sa dohodne v jednom round-tripe namiesto dvoch. Pri 80 ms RTT to ušetrí presne 80 ms.
  2. 0-RTT resumption: opätovné spojenie z rovnakého klienta pošle prvý request rovno s prvým paketom. TTFB pri navigácii v rámci webu klesne o ďalších 80 až 100 ms.
  3. Žiadny head-of-line blocking: stratený paket pre jeden stream nezdržuje ostatné, čo pomáha pri zlej mobilnej sieti.

Cloudflare, Fastly, Vercel a AWS CloudFront ho zapínajú jediným prepínačom. Pre vlastný Nginx 1.25+ nakonfigurujte:

server {
    listen 443 quic reuseport;
    listen 443 ssl;
    http2 on;

    ssl_certificate /etc/ssl/example.crt;
    ssl_certificate_key /etc/ssl/example.key;
    ssl_protocols TLSv1.3;

    # Inzerujte HTTP/3 podporu klientovi
    add_header Alt-Svc 'h3=":443"; ma=86400';
    add_header QUIC-Status $http3;
}

103 Early Hints: rýchlejší preload kritických zdrojov

Status kód 103 Early Hints (definovaný v RFC 8297) umožňuje serveru poslať Link hlavičky pre preload predtým, než pripraví finálnu 200 OK odpoveď. Prehliadač začne sťahovať CSS, fonty a hero obrázok počas toho, ako sa na backende ešte renderuje HTML.

Príklad sekvencie:

HTTP/2 103 Early Hints
Link: </_next/static/css/app.css>; rel=preload; as=style
Link: </fonts/inter-var.woff2>; rel=preload; as=font; crossorigin
Link: </hero.avif>; rel=preload; as=image; fetchpriority=high

HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
... HTML telo ...

V Next.js 15 sa Early Hints zapínajú automaticky pre statické routes na Vercel a Cloudflare Pages. Pre Express alebo Fastify použite explicitné API:

// Fastify 5 + @fastify/early-hints plugin
app.get('/', async (request, reply) => {
  reply.writeEarlyHints({
    Link: [
      '</assets/main.css>; rel=preload; as=style',
      '</assets/hero.avif>; rel=preload; as=image; fetchpriority=high',
    ],
  });

  const data = await fetchSlowDataFromDB(); // 400 ms, toto by inak blokovalo vsetko
  return reply.view('home.html', data);
});

Reálne merania ukazujú zlepšenie LCP o 100 až 400 ms, najmä pri pomalých backendoch alebo CMS systémoch. Kombinácia s optimalizáciou obrázkov pre web a správnym fetchpriority atribútom dáva najlepšie výsledky.

Streaming SSR a Partial Prerendering

Tradičný server-side rendering pošle prvý bajt až keď je celé HTML hotové. Ak databáza odpovedá 600 ms, TTFB bude minimálne 600 ms. Streaming SSR pošle <head> a kostru stránky okamžite (do 50 ms) a zvyšok prúdi v chunkoch s Transfer-Encoding: chunked.

React 19 a Next.js 15 to robia natívne cez Suspense:

// app/page.tsx
import { Suspense } from 'react';
import { ProductList } from './ProductList';
import { Skeleton } from './Skeleton';

export default function HomePage() {
  return (
    <main>
      <h1>Vitajte v obchode</h1>
      <Suspense fallback={<Skeleton />}>
        {/* Toto moze trvat 600 ms, TTFB neceka */}
        <ProductList />
      </Suspense>
    </main>
  );
}

Partial Prerendering (PPR), stabilný v Next.js 15.2 z apríla 2026, ide ešte ďalej. Statickú časť stránky vygeneruje pri builde a hosťuje na edge CDN s TTFB pod 50 ms, dynamické časti streamuje v rovnakom HTML payloade. Astro 5 má podobnú schopnosť cez server:defer direktívu.

Optimalizácia databázy a backend kódu

Ak ste vyčerpali sieťové optimalizácie a TTFB stále viazne, vinník je pravdepodobne na backende. V poradí najčastejších príčin:

  1. Chýbajúce indexy: spustite EXPLAIN ANALYZE nad pomalými dotazmi. Sekvenčný scan tabuľky s miliónom riadkov pridá ľahko 200 až 500 ms.
  2. N+1 dotazy: jeden zoznam produktov nevolajte ako 1 query na list plus 50 queries na ceny. Použite JOIN alebo eager loading (Prisma include, Drizzle with, EF Core Include).
  3. Synchronné volania externých API: ak SSR čaká na response z platobnej brány, posuňte to do klientského fetchu po hydratácii.
  4. Studené starty serverless funkcií: AWS Lambda, Vercel Functions a Cloudflare Workers majú rôzne cold-start latencie. Workers a Lambda SnapStart sú v 2026 najrýchlejšie (pod 10 ms).

Pre PostgreSQL je v roku 2026 odporúčaný stack pgbouncer alebo Supabase Supavisor pre connection pooling plus materializované views pre často čítané agregáty. Pri Redis cachi nezabudnite na SETEX s TTL a stratégiu cache-aside. Ak Redis padne, fallback na DB nesmie zhodiť celý web.

Pre čítavé endpointy (typický blog, produktový katalóg) má najlepší pomer úsilia k zisku in-memory caching v Node.js procese. Pamätám si projekt, kde som nasadil lru-cache s 60 sekundovým TTL na zoznam kategórií a TTFB skočil z 300 ms na 2 ms za odpoludnie. Pre detailnejšie ladenie behu na hlavnom vlákne pozri sprievodcu optimalizáciou INP.

Redirecty, DNS a TLS handshake

Tri rýchle výhry, ktoré sa často zabúdajú:

ProblémVplyv na TTFBRiešenie
Reťazec presmerovaní HTTP→HTTPS→www+200 až 600 msKonfigurujte iba jedno priame 301 redirect na finálnu URL
Pomalý DNS (autoritatívny server)+50 až 200 msPoužite anycast DNS (Cloudflare, Route 53, NS1) s nízkym TTL
TLS handshake bez session resumption+100 až 200 msZapnite TLS 1.3 plus session tickets plus OCSP stapling
Žiadny preconnect na 3rd-party+100 až 300 msPridajte <link rel="preconnect"> v <head>

Pre tretie strany ako Google Fonts, analytiku alebo CDN obrázkov pridajte na začiatok dokumentu:

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="dns-prefetch" href="https://www.google-analytics.com">

Toto neovplyvní TTFB hlavného dokumentu, ale skráti čas potrebný na následné zdroje, čo má rovnaký efekt na vnímanú rýchlosť stránky.

Často kladené otázky

Aká je dobrá hodnota TTFB v roku 2026?

Podľa web.dev je dobrá hodnota TTFB ≤ 800 ms pre 75. percentil reálnych návštev. Hodnoty 800 až 1800 ms vyžadujú zlepšenie a nad 1800 ms sa považujú za slabé. Top 10 % stránok dosahuje TTFB pod 200 ms vďaka edge cachovaniu.

Je TTFB Core Web Vital?

Nie, TTFB nie je oficiálny Core Web Vital, tými sú LCP, INP a CLS. TTFB je však Googlom klasifikovaný ako podporná metrika, lebo priamo limituje LCP. Bez optimalizovaného TTFB sa pod 2,5 s LCP nedostanete.

Pomôže CDN naozaj znížiť TTFB?

Áno, pre cachovateľný obsah je CDN najefektívnejšia optimalizácia. Edge cachovanie HTML zníži TTFB z 800 až 1500 ms na 30 až 80 ms. Aj pre nezacachovateľný obsah CDN znižuje latenciu vďaka geograficky bližšiemu POP a optimalizovanému spojeniu na origin.

Ako môžem otestovať, či mám zapnuté HTTP/3?

V Chrome DevTools otvorte Network panel, kliknite pravým na hlavičky stĺpcov a zapnite "Protocol". Pri každom requeste uvidíte h3 (HTTP/3), h2 alebo http/1.1. Alternatívne použite príkaz curl --http3 -I https://example.com alebo nástroj http3check.net.

Aký je rozdiel medzi TTFB a Server Response Time v Lighthouse?

Lighthouse audit "Server response time" (kedysi nazývaný "Reduce initial server response time") meria len serverovú časť TTFB, bez DNS, TCP a TLS. Celkový TTFB nameraný cez RUM zahŕňa všetky tieto fázy, preto je typicky o 100 až 300 ms vyšší než hodnota z Lighthouse.

Funguje 103 Early Hints v starších prehliadačoch?

103 Early Hints podporuje Chrome 103+, Edge 103+, Firefox 120+ a Safari 17.4+ (jar 2024). Staršie prehliadače hlavičku ignorujú bez akýchkoľvek negatívnych dôsledkov, je teda bezpečné ju zapnúť ako progresívne vylepšenie.

Editorial Team
O Autorovi Editorial Team

Our team of expert writers and editors.