Web Performance

Webfonts zijn nog altijd de makkelijkste prestatiewinst op de meeste sites

Vijf jaar nadat variabele fonts beschikbaar kwamen en tien jaar nadat WOFF2 universeel werd, laadt de gemiddelde site fonts nog steeds verkeerd. Dit is de korte versie van hoe je het goed doet.

The Wux Webtools Team The Wux Webtools Team 4 min lezen
Editorial illustration of a single bold letter glyph with subtle weight axis lines, soft green palette
Inhoudsopgave
  1. Het patroon dat blijft terugkomen
  2. Gebruik één variabel font in plaats van zes statische
  3. Stel een verstandige `font-display` in
  4. Stem je fallback-metrics af
  5. Host zelf
  6. Wanneer je custom fonts helemaal kunt overslaan
  7. De eerlijke samenvatting

Het patroon dat blijft terugkomen

Als je vandaag tien willekeurige productiewebsites auditt, zie je op de meeste ervan ongeveer dezelfde fontsituatie:

  • Zes tot tien fontbestanden geladen op de homepage
  • Allemaal in WOFF2 (goed), maar zonder font-display-strategie (slecht)
  • Meerdere gewichten en stijlen die nergens op de pagina worden gebruikt
  • De hele stack wordt geleverd vanaf een domein van een derde partij (meestal Google Fonts), met alle DNS-, TLS- en privacykosten die daarbij horen
  • Geen subsetting met unicode-range, waardoor elke bezoeker de Cyrillische en Griekse glyphs downloadt, zelfs als de pagina in het Engels is

Dit is geen probleem dat alleen bij kleine sites voorkomt. Veel goed gefinancierde marketingpagina’s laden nog steeds 600 KB aan fonts voordat de eerste alinea zichtbaar kan worden gerenderd. Als je het patroon eenmaal ziet, kun je het niet meer niet zien.

De oplossing is niet exotisch. Het is een handvol goed begrepen technieken die al jaren in browsers zitten.

Gebruik één variabel font in plaats van zes statische

Als je Inter Regular, Inter Medium, Inter SemiBold, Inter Bold en hun cursieven laadt, download je grofweg zes keer meer bytes dan nodig. Eén enkel variabel Inter-font dekt de volledige gewichtas (en in sommige builds ook slant) in één bestand dat nauwelijks groter is dan twee statische gewichten.

De browserondersteuning is al jaren geen discussie meer — variabele fonts werken overal waar het ertoe doet. De resterende aarzeling is vooral aangeleerd spiergeheugen uit het tijdperk van statische fonts.

Een praktische vuistregel: één variabel fontbestand per schrift, per familie. Latijn in één bestand, Cyrillisch in een ander, Grieks in een derde, voorwaardelijk geladen met unicode-range. Dat is alles.

Stel een verstandige font-display in

Het standaardgedrag wanneer een custom font nog laadt, is om niets te tonen — onzichtbare tekst — tot maximaal drie seconden. Dit is de slechtst mogelijke standaard. Gebruikers zien een lege pagina en nemen aan dat er iets stuk is.

Voeg dit toe aan elke @font-face-regel:

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

swap toont het fallback-font onmiddellijk en wisselt naar het custom font zodra dat is geladen. De gebruiker kan de pagina lezen vanaf milliseconde nul. De afweging is een korte layoutverschuiving wanneer de swap gebeurt; die beperk je met de volgende techniek.

Stem je fallback-metrics af

Een flits van ongestileerde tekst voelt alleen storend wanneer het fallback-font en het custom font heel verschillende metrics hebben. Moderne CSS lost dit op met size-adjust, ascent-override en verwante eigenschappen:

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

Met goed afgestemde fallback-metrics is de swap nauwelijks waarneembaar — woorden nemen vóór en na het laden van het custom font dezelfde horizontale ruimte in.

Het werk van Google rond --allow-fallback-font-metrics valt nu onder basisondersteuning in browsers, en er is een toolingpipeline (de fontaine-library en vergelijkbare tools) die de juiste waarden binnen enkele seconden voor je berekent.

Host zelf

Google Fonts is handig en gratis, maar brengt twee echte kosten met zich mee:

  1. Een tweede TLS-handshake. Zelfs met HTTP/3 en connection coalescing is een extra origin zelden gratis.
  2. Een privacy- en compliancevraag. Meerdere Europese rechtbanken hebben geoordeeld dat het laden van Google Fonts vanaf fonts.gstatic.com neerkomt op het doorgeven van persoonsgegevens (het IP-adres) aan een derde partij. Zelf hosten haalt die vraag volledig weg.

De download-en-host-pipeline is:

  1. Haal het WOFF2-bestand op (de variabele build als die bestaat)
  2. Subset het naar de schriften die je publiek daadwerkelijk gebruikt
  3. Serveer het vanaf dezelfde origin als de rest van je site, met een lange Cache-Control: max-age=31536000, immutable
  4. Preload het meest kritieke gewicht: <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-var.woff2" crossorigin>

Dat is de hele pipeline. Voor een bestaande site kost het een middag, en je gaat bijna nooit terug.

Wanneer je custom fonts helemaal kunt overslaan

Het is de moeite waard om hardop te zeggen: niet elke site heeft een custom font nodig. De systeemfontstack is inmiddels op elk besturingssysteem echt fraai:

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

Het gewicht klopt, de metrics kloppen, de rendering is afgestemd op het apparaat, en de kosten in bytes over de lijn zijn precies nul. Voor een toolsite, een interne app, een portfolio dat content voorrang geeft, of alles wat bedoeld is voor gebruikers op trage netwerken, is de systeemstack het juiste antwoord.

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

💡 Probeer dit: Converteer je TTF- of OTF-bestanden naar moderne WOFF2 met gebruiksklare CSS met behulp van Webfont Generator, wat de formaatwissel is die het bericht aanbeveelt.

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

De eerlijke samenvatting

Voor een typische kleine site dekken vier stappen het hele webfont-prestatieverhaal:

  1. Eén variabel font per familie per schrift
  2. font-display: swap met afgestemde fallback-metrics
  3. Zelf gehost met lange cacheheaders en een preload voor het kritieke gewicht
  4. Of sla fonts helemaal over en gebruik de systeemstack

Doe dit één keer en je wint enkele honderden kilobytes terug op de homepage, pakt een paar honderd milliseconden aan ervaren prestaties, en verwijdert onderweg een afhankelijkheid van een derde partij. Weinig wijzigingen hebben een betere verhouding tussen inspanning en opbrengst.

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

Veelgestelde vragen

Worden variabele fonts overal ondersteund?
Ja — elke browser die ertoe doet, ondersteunt variabele fonts al jaren. De aarzeling die je soms hoort, is spiergeheugen uit het tijdperk van statische fonts; in 2026 is het geen echt compatibiliteitsprobleem.
Moet ik mijn fonts handmatig subsetten?
Voor sites met alleen Latijns schrift: ja — een Latijnse subset is ongeveer half zo groot als het volledige meertalige bestand. Gebruik voor meertalige sites `unicode-range` om elk schrift als apart bestand te laden, zodat bezoekers alleen downloaden wat hun content daadwerkelijk nodig heeft.
Waarom veroorzaakt font-display: swap soms een lelijke flits?
Omdat de metrics van het fallback-font verschillen van die van het custom font, waardoor woorden opnieuw doorlopen wanneer de swap gebeurt. Gebruik `size-adjust`, `ascent-override` en `descent-override` op de fallback om de metrics van het custom font te benaderen — de flits wordt bijna onzichtbaar.
Is Google Fonts echt een privacyprobleem?
Meerdere Europese rechterlijke uitspraken hebben geoordeeld dat laden vanaf `fonts.gstatic.com` het IP-adres van de bezoeker zonder toestemming doorgeeft aan een derde partij, wat in sommige interpretaties een AVG-schending is. Zelf hosten haalt die vraag volledig weg en is meestal toch sneller.

Bronnen & verder lezen

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

Laatst bijgewerkt:

Blijf lezen