Web Performance

Webové fonty jsou na většině webů pořád nejsnazší výhra ve výkonu

Pět let poté, co se prosadily proměnné fonty, a deset let poté, co se WOFF2 stal univerzálním, průměrný web stále načítá fonty špatně. Tady je krátká verze toho, jak to udělat správně.

The Wux Webtools Team The Wux Webtools Team 5 min čtení
Editorial illustration of a single bold letter glyph with subtle weight axis lines, soft green palette
Obsah
  1. Vzorec, který se pořád opakuje
  2. Použijte jeden proměnný font místo šesti statických
  3. Nastavte rozumné `font-display`
  4. Slaďte metriky záložního fontu
  5. Hostujte fonty sami
  6. Kdy vlastní fonty úplně vynechat
  7. Upřímné shrnutí

Vzorec, který se pořád opakuje

Když dnes zanalyzujete náhodných deset produkčních webů, na většině z nich najdete zhruba stejnou situaci s fonty:

  • Šest až deset souborů fontů načtených na domovské stránce
  • Všechny ve WOFF2 (dobře), ale bez strategie font-display (špatně)
  • Několik tlouštěk a stylů, které se na stránce nikde nepoužívají
  • Celý stack servírovaný z domény třetí strany (obvykle Google Fonts) se všemi náklady na DNS, TLS a soukromí, které z toho plynou
  • Žádné ořezání pomocí unicode-range, takže každý návštěvník stahuje i cyrilici a řecké glyfy, i když je stránka anglicky

To není problém jen malých webů. Spousta dobře financovaných marketingových stránek stále načítá 600 KB fontů ještě předtím, než lze vykreslit první odstavec. Jakmile si toho vzorce začnete všímat, už ho nepřestanete vidět.

Náprava není nic exotického. Je to několik dobře známých technik, které jsou v prohlížečích už roky.

Použijte jeden proměnný font místo šesti statických

Pokud načítáte Inter Regular, Inter Medium, Inter SemiBold, Inter Bold a jejich kurzívy, stahujete zhruba šestkrát víc bajtů, než potřebujete. Jeden proměnný font Inter pokryje celou osu tloušťky (a v některých buildech i sklon) v jednom souboru, který je sotva větší než dva statické řezy.

Podpora v prohlížečích je vyřešená už roky — proměnné fonty fungují všude, kde na tom záleží. Zbývající váhání je většinou jen naučený reflex z éry statických fontů.

Praktické pravidlo: jeden soubor proměnného fontu na skript a rodinu. Latinka v jednom souboru, cyrilice v druhém, řečtina ve třetím, načítané podmíněně pomocí unicode-range. To je celé.

Nastavte rozumné font-display

Výchozí chování při načítání vlastního fontu je nezobrazit nic — neviditelný text — až po dobu tří sekund. To je nejhorší možné výchozí nastavení. Uživatelé vidí prázdnou stránku a předpokládají, že je něco rozbité.

Přidejte to do každého pravidla @font-face:

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-var.woff2') format('woff2-variations');
  font-weight: 100 900;
  font-display: swap;
}

swap okamžitě zobrazí záložní font a vlastní font dosadí, jakmile se načte. Uživatel může číst stránku od nulté milisekundy. Cenou je krátký posun rozložení ve chvíli výměny, který zmírníte následující technikou.

Slaďte metriky záložního fontu

Záblesk nestylovaného textu působí rušivě jen tehdy, když mají záložní a vlastní font velmi odlišné metriky. Moderní CSS to řeší pomocí size-adjust, ascent-override a souvisejících vlastností:

@font-face {
  font-family: 'Inter Fallback';
  src: local('Arial');
  size-adjust: 107%;
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
}

S doladěnými metrikami záložního fontu je výměna sotva postřehnutelná — slova zabírají stejný vodorovný prostor před načtením vlastního fontu i po něm.

Práce Google na --allow-fallback-font-metrics je dnes součástí běžné podpory prohlížečů a existuje nástrojová pipeline (knihovna fontaine a podobné), která vám správné hodnoty spočítá během několika sekund.

Hostujte fonty sami

Google Fonts je pohodlné, zdarma a přináší dvě skutečné ceny:

  1. Druhé navázání TLS. I s HTTP/3 a slučováním připojení není další origin téměř nikdy zadarmo.
  2. Otázku soukromí a souladu s předpisy. Několik evropských soudů rozhodlo, že načítání Google Fonts z fonts.gstatic.com představuje předání osobních údajů (IP adresy) třetí straně. Vlastní hosting tuto otázku úplně odstraňuje.

Pipeline stažení a vlastního hostingu je:

  1. Získejte soubor WOFF2 (proměnný build, pokud existuje)
  2. Ořežte ho na skripty, které vaše publikum skutečně používá
  3. Servírujte ho ze stejného originu jako zbytek webu, s dlouhým Cache-Control: max-age=31536000, immutable
  4. Přednačtěte nejkritičtější řez: <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-var.woff2" crossorigin>

To je celá pipeline. U existujícího webu to zabere odpoledne a téměř nikdy se nebudete chtít vrátit zpět.

Kdy vlastní fonty úplně vynechat

Stojí za to říct nahlas: ne každý web potřebuje vlastní font. Systémový font stack je dnes opravdu krásný na každém operačním systému:

font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Inter, sans-serif;

Tloušťka sedí, metriky sedí, vykreslování je vyladěné pro dané zařízení a cena v bajtech po síti je přesně nula. Pro web s nástroji, interní aplikaci, portfolio, které upřednostňuje obsah, nebo cokoli cílené na uživatele v pomalých sítích je systémový stack správná odpověď.

<!-- tool-cta:start -->

💡 Vyzkoušejte toto: Převeďte své soubory TTF nebo OTF na moderní WOFF2 s připraveným CSS pomocí Webfont Generator, což je změna formátu, kterou příspěvek doporučuje.

<!-- tool-cta:end -->

Upřímné shrnutí

U typického malého webu pokryjí celý příběh výkonu webových fontů čtyři kroky:

  1. Jeden proměnný font na rodinu a skript
  2. font-display: swap se sladěnými metrikami záložního fontu
  3. Vlastní hosting s dlouhými cache hlavičkami a preload pro kritický řez
  4. Nebo fonty úplně vynechte a použijte systémový stack

Udělejte to jednou a získáte zpět několik stovek kilobajtů z domovské stránky, vyhrajete pár stovek milisekund vnímaného výkonu a zároveň odstraníte závislost na třetí straně. Málokterá změna má lepší poměr úsilí a přínosu.

Four-step checklist for faster web fonts: variable font, font-display swap with matched fallback metrics, self-host with cache and preload, or use system stack
InfographicThe 4-step web font performance fix — A compact playbook for reclaiming several hundred kilobytes and improving perceived performance
Comparison of six static font files versus one variable font file with script-based subsetting for Latin, Cyrillic, and Greek
InfographicFrom six static font files to one variable font — One variable file can replace a pile of weights and italics with far fewer bytes
Four-step self-hosted font pipeline: get WOFF2 variable file, subset by script, serve from same origin with immutable cache, preload critical weight
InfographicSelf-hosting web fonts: the simple delivery pipeline — A same-origin font pipeline cuts extra origin cost and removes the privacy question

Často kladené otázky

Jsou proměnné fonty podporované všude?
Ano — každý relevantní prohlížeč podporuje proměnné fonty už roky. Váhání, které občas slyšíte, je naučený reflex z éry statických fontů; v roce 2026 to není skutečný problém kompatibility.
Mám fonty ořezávat ručně?
U webů pouze v latince ano — výřez pro latinku má zhruba poloviční velikost oproti plnému vícejazyčnému souboru. U vícejazyčných webů použijte `unicode-range` a načítejte každý skript jako samostatný soubor, aby návštěvníci stahovali jen to, co jejich obsah skutečně potřebuje.
Proč `font-display: swap` někdy způsobí ošklivý záblesk?
Protože metriky záložního fontu se liší od vlastního, takže se slova při výměně znovu zalomí. Použijte `size-adjust`, `ascent-override` a `descent-override` na záložním fontu tak, aby odpovídaly metrikám vlastního fontu — záblesk bude téměř neviditelný.
Je Google Fonts opravdu problém se soukromím?
Několik rozhodnutí evropských soudů konstatovalo, že načítání z `fonts.gstatic.com` předává IP adresu návštěvníka třetí straně bez souhlasu, což je podle některých výkladů porušení GDPR. Vlastní hosting tuto otázku úplně odstraňuje a obvykle je stejně rychlejší.

Zdroje a další čtení

  1. MDN — `@font-face` and `font-display`
  2. MDN — Variable fonts guide
  3. web.dev — Reduce web font size
O autorovi
The Wux Webtools Team

Naposledy aktualizováno:

Pokračujte ve čtení