Web Performance

Web-fontit ovat yhä helpoin suorituskykyvoitto useimmilla sivustoilla

Viisi vuotta muuttuvien fonttien julkaisun ja kymmenen vuotta WOFF2:n yleistymisen jälkeen keskivertosivusto lataa fontit edelleen väärin. Tässä lyhyt versio siitä, miten se tehdään oikein.

The Wux Webtools Team The Wux Webtools Team 4 min lukemista
Editorial illustration of a single bold letter glyph with subtle weight axis lines, soft green palette
Sisällysluettelo
  1. Kuvio, joka toistuu yhä
  2. Käytä yhtä muuttuvaa fonttia kuuden staattisen sijaan
  3. Aseta järkevä `font-display`
  4. Sovita varafontin metriikat
  5. Isännöi itse
  6. Milloin mukautetut fontit kannattaa jättää kokonaan pois
  7. Rehellinen yhteenveto

Kuvio, joka toistuu yhä

Jos auditoit tänään satunnaiset kymmenen tuotannossa olevaa verkkosivustoa, löydät useimmilta niistä suunnilleen saman fonttitilanteen:

  • Etusivulla ladataan kuudesta kymmeneen fonttitiedostoa
  • Kaikki ovat WOFF2-muodossa (hyvä), mutta ilman font-display-strategiaa (huono)
  • Mukana on useita painoja ja tyylejä, joita ei käytetä sivulla missään
  • Koko pino palvellaan kolmannen osapuolen domainista (yleensä Google Fonts), kaikkine DNS-, TLS- ja yksityisyyskustannuksineen
  • Ei unicode-range-osajoukkoja, joten jokainen kävijä lataa kyrilliset ja kreikkalaiset glyyfit, vaikka sivu olisi englanniksi

Tämä ei ole vain pienten sivustojen ongelma. Moni hyvin rahoitettu markkinointisivu lataa edelleen 600 KB fontteja ennen kuin ensimmäinen kappale voidaan piirtää. Kun alat huomata kuvion, et voi olla näkemättä sitä.

Korjaus ei ole eksoottinen. Se on kourallinen hyvin tunnettuja tekniikoita, jotka ovat olleet selaimissa vuosia.

Käytä yhtä muuttuvaa fonttia kuuden staattisen sijaan

Jos lataat Inter Regular-, Inter Medium-, Inter SemiBold-, Inter Bold -fontit ja niiden kursiivit, lataat karkeasti kuusi kertaa enemmän tavuja kuin tarvitset. Yksi Interin muuttuva fontti kattaa koko painoakselin (ja joissakin koosteissa myös kallistuksen) yhdessä tiedostossa, joka on vain hieman kahta staattista painoa suurempi.

Selaintuen osalta asia on ollut selvä jo vuosia — muuttuvat fontit toimivat kaikkialla, missä sillä on merkitystä. Jäljellä oleva epäröinti on enimmäkseen staattisten fonttien aikakaudelta periytynyttä lihasmuistia.

Käytännön nyrkkisääntö: yksi muuttuva fonttitiedosto per kirjoitusjärjestelmä, per fonttiperhe. Latinalainen yhdessä tiedostossa, kyrillinen toisessa, kreikkalainen kolmannessa, ladattuna ehdollisesti unicode-range-määrityksellä. Siinä kaikki.

Aseta järkevä font-display

Oletustoiminta silloin, kun mukautettu fontti latautuu yhä, on näyttää ei mitään — näkymätöntä tekstiä — jopa kolmen sekunnin ajan. Tämä on huonoin mahdollinen oletus. Käyttäjät näkevät tyhjän sivun ja olettavat, että jokin on rikki.

Lisää tämä jokaiseen @font-face-sääntöön:

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

swap näyttää varafontin heti ja vaihtaa mukautetun fontin tilalle, kun se latautuu. Käyttäjä voi lukea sivua nollamillisekunnista alkaen. Kompromissi on lyhyt asettelun siirtymä vaihdon tapahtuessa, ja sitä lievennetään seuraavalla tekniikalla.

Sovita varafontin metriikat

Tyylittelemättömän tekstin välähdys tuntuu häiritsevältä vain silloin, kun varafontilla ja mukautetulla fontilla on hyvin erilaiset metriikat. Moderni CSS korjaa tämän ominaisuuksilla size-adjust, ascent-override ja muilla vastaavilla:

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

Kun varafontin metriikat on säädetty, vaihto on tuskin havaittava — sanat vievät saman vaakasuuntaisen tilan ennen mukautetun fontin saapumista ja sen jälkeen.

Googlen --allow-fallback-font-metrics-työ kuuluu nyt selainten perustukeen, ja käytössä on työkaluketjuja (fontaine-kirjasto ja vastaavat), jotka laskevat oikeat arvot puolestasi sekunneissa.

Isännöi itse

Google Fonts on kätevä ja ilmainen, mutta sillä on kaksi todellista kustannusta:

  1. Toinen TLS-kättely. Jopa HTTP/3:n ja yhteyksien yhdistämisen kanssa ylimääräinen origin on harvoin ilmainen.
  2. Yksityisyys- ja vaatimustenmukaisuuskysymys. Useat eurooppalaiset tuomioistuimet ovat linjanneet, että Google Fonts -fonttien lataaminen osoitteesta fonts.gstatic.com merkitsee henkilötietojen (IP-osoitteen) välittämistä kolmannelle osapuolelle. Itseisännöinti poistaa kysymyksen kokonaan.

Lataus- ja isännöintiputki on:

  1. Hanki WOFF2-tiedosto (muuttuva kooste, jos sellainen on olemassa)
  2. Rajaa se niihin kirjoitusjärjestelmiin, joita yleisösi oikeasti käyttää
  3. Palvele se samasta originista kuin sivustosi muu sisältö, pitkällä Cache-Control: max-age=31536000, immutable -otsakkeella
  4. Esilataa kriittisin paino: <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-var.woff2" crossorigin>

Siinä on koko putki. Olemassa olevalle sivustolle se vie iltapäivän, etkä lähes koskaan palaa entiseen.

Milloin mukautetut fontit kannattaa jättää kokonaan pois

Tämä kannattaa sanoa ääneen: kaikki sivustot eivät tarvitse mukautettua fonttia. Järjestelmäfonttipino on nykyään aidosti kaunis jokaisessa käyttöjärjestelmässä:

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

Paino on oikea, metriikat ovat oikeat, renderöinti on viritetty laitteelle, ja verkon yli siirrettävien tavujen kustannus on tasan nolla. Työkalusivustolle, sisäiselle sovellukselle, sisältöä painottavalle portfoliolle tai mille tahansa hitailla verkoilla oleville käyttäjille suunnatulle palvelulle järjestelmäfonttipino on oikea vastaus.

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

💡 Kokeile tätä: Muunna TTF- tai OTF-tiedostosi moderniksi WOFF2-muodoksi käyttövalmiin CSS:n kanssa käyttämällä Webfont Generator, mikä on artikkelin suosittelema formaatin vaihto.

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

Rehellinen yhteenveto

Tyypillisellä pienellä sivustolla neljä askelta kattaa koko web-fonttien suorituskykytarinan:

  1. Yksi muuttuva fontti per fonttiperhe per kirjoitusjärjestelmä
  2. font-display: swap ja yhteensovitetut varafontin metriikat
  3. Itse isännöitynä, pitkillä välimuistiotsakkeilla ja kriittisen painon preload-määrityksellä
  4. Tai jätä fontit kokonaan pois ja käytä järjestelmäfonttipinoa

Tee tämä kerran, ja saat etusivulta takaisin useita satoja kilotavuja, voitat muutamia satoja millisekunteja koetussa suorituskyvyssä ja poistat samalla kolmannen osapuolen riippuvuuden. Harvoilla muutoksilla on parempi vaiva–hyöty-suhde.

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

Usein kysytyt kysymykset

Tuetaanko muuttuvia fontteja kaikkialla?
Kyllä — jokainen merkityksellinen selain on tukenut muuttuvia fontteja jo vuosia. Joskus kuulemasi epäröinti on staattisten fonttien aikakaudelta periytynyttä lihasmuistia; se ei ole todellinen yhteensopivuushuoli vuonna 2026.
Pitäisikö fontit rajata osajoukoiksi käsin?
Vain latinalaisia merkkejä käyttävillä sivustoilla kyllä — latinalainen osajoukko on kooltaan karkeasti puolet täydestä monikielisestä tiedostosta. Monikielisillä sivustoilla käytä `unicode-range`-määritystä ladataksesi jokaisen kirjoitusjärjestelmän erillisenä tiedostona, jolloin kävijät lataavat vain sen, mitä heidän sisältönsä oikeasti tarvitsee.
Miksi font-display: swap aiheuttaa joskus ruman välähdyksen?
Koska varafontin metriikat eroavat mukautetun fontin metriikoista, sanat taittuvat uudelleen vaihdon tapahtuessa. Käytä varafontissa `size-adjust`-, `ascent-override`- ja `descent-override`-ominaisuuksia vastaamaan mukautetun fontin metriikoita — välähdyksestä tulee lähes näkymätön.
Onko Google Fonts todella yksityisyysongelma?
Useat eurooppalaiset tuomioistuinratkaisut ovat linjanneet, että lataaminen osoitteesta `fonts.gstatic.com` välittää kävijän IP-osoitteen kolmannelle osapuolelle ilman suostumusta, mikä on joidenkin tulkintojen mukaan GDPR-rikkomus. Itseisännöinti poistaa kysymyksen kokonaan ja on yleensä joka tapauksessa nopeampaa.

Lähteet ja lisälukeminen

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

Viimeksi päivitetty:

Jatka lukemista