Beheer van lettertypeprestaties met lettertypeweergave

Rob Dodson
Rob Dodson

Het bepalen van het gedrag van een webfont tijdens het laden kan een belangrijke techniek zijn om de prestaties te optimaliseren. Met de nieuwe font-display descriptor voor @font-face kunnen ontwikkelaars bepalen hoe hun webfonts worden weergegeven (of hoe ze terugvallen), afhankelijk van hoe lang het duurt om ze te laden.

Verschillen in lettertypeweergave vandaag de dag

Webfonts bieden ontwikkelaars de mogelijkheid om rijke typografie in hun projecten te integreren, met als nadeel dat als de gebruiker nog geen lettertype heeft, de browser er tijd aan moet besteden om het te downloaden. Omdat netwerken onstabiel kunnen zijn, kan deze downloadtijd de gebruikerservaring negatief beïnvloeden. Niemand zal er immers om geven hoe mooi je tekst is als het onevenredig lang duurt om weer te geven!

Om het risico van een trage lettertypedownload te beperken, implementeren de meeste browsers een time-out waarna een fallback-lettertype wordt gebruikt. Dit is een nuttige techniek, maar helaas verschilt de implementatie per browser.

Browser Time-out Terugval Ruil
Chroom 35+ 3 seconden Ja Ja
Opera 3 seconden Ja Ja
Firefox 3 seconden Ja Ja
Internet Explorer 0 seconden Ja Ja
Safari Geen time-out N.v.t. N.v.t.
  • Chrome en Firefox hebben een time-out van drie seconden waarna de tekst wordt weergegeven met het standaardlettertype. Als het lettertype wordt gedownload, vindt er uiteindelijk een omwisseling plaats en wordt de tekst opnieuw weergegeven met het gewenste lettertype.
  • Internet Explorer heeft een time-out van nul seconden, wat resulteert in onmiddellijke tekstweergave. Als het gevraagde lettertype nog niet beschikbaar is, wordt een fallback gebruikt en wordt de tekst later opnieuw weergegeven zodra het gevraagde lettertype beschikbaar is.
  • Safari heeft geen time-outgedrag (of in ieder geval niets anders dan een standaard netwerktime-out).

Om het nog erger te maken, hebben ontwikkelaars beperkte controle over hoe deze regels hun applicatie beïnvloeden. Een prestatiegerichte ontwikkelaar geeft wellicht de voorkeur aan een snellere eerste ervaring met een fallback-lettertype en gebruikt het mooiere weblettertype pas bij volgende bezoeken nadat het is gedownload. Met tools zoals de Font Loading API is het mogelijk om een ​​deel van het standaardgedrag van de browser te overschrijven en zo prestatieverbeteringen te behalen, maar dit brengt wel de kosten met zich mee dat er niet-triviale hoeveelheden JavaScript moeten worden geschreven die vervolgens in de pagina moeten worden ingevoegd of vanuit een extern bestand moeten worden opgevraagd, wat extra HTTP-latentie met zich meebrengt.

Om deze situatie te verhelpen, heeft de CSS Working Group een nieuwe @font-face descriptor voorgesteld, font-display en een bijbehorende eigenschap voor het bepalen hoe een downloadbaar lettertype wordt weergegeven voordat het volledig is geladen.

Tijdlijnen voor het downloaden van lettertypen

Vergelijkbaar met het bestaande lettertype-time-outgedrag dat sommige browsers tegenwoordig hanteren, verdeelt font-display de levensduur van een lettertypedownload in drie hoofdperiodes.

  1. De eerste periode is de periode van het lettertypeblok . Gedurende deze periode moet elk element dat het lettertype probeert te gebruiken, als het lettertype niet geladen is, in plaats daarvan worden weergegeven met een onzichtbaar fallback-lettertype. Als het lettertype succesvol geladen is tijdens de blokperiode, wordt het vervolgens normaal gebruikt.
  2. De periode voor het wisselen van lettertype vindt direct na de periode voor het lettertypeblok plaats. Gedurende deze periode moet elk element dat het lettertype probeert te gebruiken, als het lettertype niet is geladen, in plaats daarvan worden weergegeven met een fallback-lettertype. Als het lettertype tijdens de wisselperiode succesvol is geladen, wordt het vervolgens normaal gebruikt.
  3. De periode waarin het lettertype niet geladen is, vindt direct na de periode waarin het lettertype is gewisseld plaats. Als het lettertype aan het begin van deze periode nog niet geladen is, wordt dit gemarkeerd als een mislukte laadpoging, waardoor het normale lettertype terugvalt. Anders wordt het lettertype normaal gebruikt.

Als u deze perioden begrijpt, kunt u font-display gebruiken om te bepalen hoe uw lettertype moet worden weergegeven, afhankelijk van of en wanneer het is gedownload.

Welk lettertype past bij u?

Om met de font-display descriptor te werken, voegt u deze toe aan uw @font-face at-rules:

@font-face {
    font-family: 'Arvo';
    font-display: auto;
    src: local('Arvo'), url(https://fonts.gstatic.com/s/arvo/v9/rC7kKhY-eUDY-ucISTIf5PesZW2xOQ-xsNqO47m55DA.woff2) format('woff2');
}

font-display ondersteunt momenteel het volgende bereik van waarden auto | block | swap | fallback | optional .

auto

Auto gebruikt de lettertypeweergavestrategie die de user-agent gebruikt. De meeste browsers hebben momenteel een standaardstrategie die vergelijkbaar is met block .

blok

block geeft het lettertype een korte blokperiode (3 seconden wordt in de meeste gevallen aanbevolen) en een oneindige wisselperiode. Met andere woorden: de browser tekent eerst "onzichtbare" tekst als het lettertype niet geladen is, maar wisselt het lettertype in zodra het geladen wordt. Om dit te doen, creëert de browser een anoniem lettertype met vergelijkbare metrieken als het geselecteerde lettertype, maar met alle glyphs die geen "inkt" bevatten. Deze waarde mag alleen worden gebruikt als de tekst in een bepaald lettertype moet worden weergegeven om de pagina bruikbaar te maken.

ruil

swap geeft het lettertype een blokperiode van nul seconden en een oneindige swapperiode. Dit betekent dat de browser de tekst direct tekent met een fallback als het lettertype niet geladen is, maar het lettertype verwisselt zodra het geladen wordt. Net als bij block moet deze waarde alleen worden gebruikt wanneer de weergave van tekst in een bepaald lettertype belangrijk is voor de pagina, maar weergave in elk lettertype nog steeds de juiste boodschap overbrengt. Logotekst is een goede kandidaat voor swap , omdat het weergeven van een bedrijfsnaam met een redelijke fallback de boodschap overbrengt, maar u uiteindelijk toch het officiële lettertype gebruikt.

terugval

Fallback geeft het lettertype een extreem korte blokperiode (100 ms of minder wordt in de meeste gevallen aanbevolen) en een korte wisselperiode (drie seconden wordt in de meeste gevallen aanbevolen). Met andere woorden: het lettertype wordt eerst weergegeven met een fallback als het niet geladen is, maar het lettertype wordt gewisseld zodra het geladen is. Als er echter te veel tijd verstrijkt, wordt de fallback gebruikt voor de rest van de levensduur van de pagina. Fallback is een goede kandidaat voor zaken zoals hoofdtekst, waarbij u wilt dat de gebruiker zo snel mogelijk begint met lezen en de ervaring niet wilt verstoren door tekst te verschuiven terwijl een nieuw lettertype wordt geladen.

optioneel

optioneel geeft het lettertype een extreem korte blokperiode (100 ms of minder wordt in de meeste gevallen aanbevolen) en een wisselperiode van nul seconden. Net als fallback is dit een goede keuze wanneer het downloaden van het lettertype meer een "leuke bijkomstigheid" is, maar niet cruciaal voor de ervaring. De optionele waarde laat het aan de browser over om te beslissen of het downloaden van het lettertype moet worden gestart. De browser kan ervoor kiezen dit niet te doen of het met een lage prioriteit te doen, afhankelijk van wat de browser het beste vindt voor de gebruiker. Dit kan nuttig zijn in situaties waarin de gebruiker een zwakke verbinding heeft en het downloaden van een lettertype mogelijk niet de beste manier is om resources te benutten.

Browserondersteuning

font-display staat momenteel achter de Experimental Web Platform Features-vlag in desktopversie Chrome 49 en wordt geleverd in Opera en Opera voor Android.

Demonstratie

Bekijk het voorbeeld om font-display eens uit te proberen. Voor prestatiegerichte ontwikkelaars kan dit een extra handig hulpmiddel zijn!