Web Performance

Уеб шрифтовете все още са най-лесната победа за производителността в повечето сайтове

Пет години след появата на вариативните шрифтове и десет години след като WOFF2 стана универсален, средният сайт все още зарежда шрифтове неправилно. Ето кратката версия как да го направите правилно.

The Wux Webtools Team The Wux Webtools Team 1 мин четене
Editorial illustration of a single bold letter glyph with subtle weight axis lines, soft green palette
Съдържание
  1. Моделът, който продължава да се повтаря
  2. Използвайте един вариативен шрифт вместо шест статични
  3. Задайте разумен `font-display`
  4. Съгласувайте метриките на резервния шрифт
  5. Хоствайте сами
  6. Кога да пропуснете персонализираните шрифтове изцяло
  7. Честното обобщение

Моделът, който продължава да се повтаря

Ако днес одитирате произволни десет production уебсайта, ще откриете приблизително една и съща ситуация с шрифтовете при повечето от тях:

  • Шест до десет файла с шрифтове, заредени на началната страница
  • Всички са в WOFF2 (добре), но без стратегия за font-display (лошо)
  • Няколко тегла и стила, които не се използват никъде на страницата
  • Целият стек се доставя от домейн на трета страна (обикновено Google Fonts), с всички DNS, TLS и privacy разходи, които това носи
  • Няма поднабори чрез unicode-range, така че всеки посетител изтегля кирилските и гръцките глифове, дори ако страницата е на английски

Това не е проблем, характерен само за малки сайтове. Много добре финансирани маркетингови страници все още зареждат 600 KB шрифтове, преди първият абзац да може да бъде изрисуван. Щом веднъж започнете да забелязвате този модел, няма как да спрете да го виждате.

Поправката не е екзотична. Това са няколко добре познати техники, които са налични в браузърите от години.

Използвайте един вариативен шрифт вместо шест статични

Ако зареждате Inter Regular, Inter Medium, Inter SemiBold, Inter Bold и техните italics, изтегляте приблизително шест пъти повече байтове, отколкото са ви нужни. Един вариативен Inter шрифт покрива цялата ос на теглата (и наклон, в някои build-ове) в един файл, който е само малко по-голям от две статични тегла.

Историята с поддръжката в браузърите е решена от години — вариативните шрифтове работят навсякъде, където има значение. Оставащото колебание е най-вече наследена мускулна памет от ерата на статичните шрифтове.

Практично правило: един файл с вариативен шрифт за всяка писменост, за всяко семейство. Latin в един файл, Cyrillic в друг, Greek в трети, зареждани условно чрез unicode-range. Това е всичко.

Задайте разумен font-display

Поведението по подразбиране, когато персонализиран шрифт все още се зарежда, е да не се показва нищо — невидим текст — до три секунди. Това е възможно най-лошата настройка по подразбиране. Потребителите виждат празна страница и приемат, че нещо е счупено.

Добавете това към всяко правило @font-face:

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

swap показва резервния шрифт веднага и заменя с персонализирания шрифт, когато той се зареди. Потребителят може да чете страницата от нулевата милисекунда. Компромисът е кратко изместване на оформлението при смяната, което смекчавате със следващата техника.

Съгласувайте метриките на резервния шрифт

Проблясъкът на нестилизиран текст изглежда неприятен само когато резервният и персонализираният шрифт имат много различни метрики. Съвременният CSS решава това със size-adjust, ascent-override и сродните им свойства:

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

С добре настроени метрики на резервния шрифт смяната е едва забележима — думите заемат едно и също хоризонтално пространство преди и след пристигането на персонализирания шрифт.

Работата на Google по --allow-fallback-font-metrics вече е част от базовата поддръжка в браузърите, а има и tooling pipeline (библиотеката fontaine и подобни), който изчислява правилните стойности за секунди.

Хоствайте сами

Google Fonts е удобен, безплатен и носи два реални разхода:

  1. Второ TLS ръкостискане. Дори с HTTP/3 и connection coalescing, допълнителен origin рядко е безплатен.
  2. Въпрос за privacy и съответствие. Няколко европейски съда са постановили, че зареждането на Google Fonts от fonts.gstatic.com представлява предаване на лични данни (IP адреса) на трета страна. Самостоятелният хостинг премахва въпроса изцяло.

Процесът за изтегляне и хостване е:

  1. Вземете WOFF2 файла (вариативен build, ако съществува)
  2. Направете поднабор до писменостите, които вашата аудитория реално използва
  3. Доставяйте го от същия origin като останалата част от сайта си, с дълъг Cache-Control: max-age=31536000, immutable
  4. Preload-нете най-критичното тегло: <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-var.woff2" crossorigin>

Това е целият процес. Отнема един следобед за съществуващ сайт и почти никога не се връщате назад.

Кога да пропуснете персонализираните шрифтове изцяло

Струва си да го кажем ясно: не всеки сайт има нужда от персонализиран шрифт. Стекът от системни шрифтове вече е наистина красив във всяка операционна система:

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

Теглото е правилно, метриките са правилни, рендирането е настроено за устройството, а разходът в байтове по мрежата е точно нула. За сайт с инструменти, вътрешно приложение, портфолио, което поставя съдържанието на първо място, или каквото и да е, насочено към потребители в бавни мрежи, системният стек е правилният отговор.

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

💡 Опитайте това: Конвертирайте вашите TTF или OTF файлове в модерния WOFF2 с готов за използване CSS чрез Webfont Generator, което е смяната на формата, препоръчана в публикацията.

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

Честното обобщение

За типичен малък сайт четири стъпки покриват цялата история на производителността при уеб шрифтовете:

  1. Един вариативен шрифт за всяко семейство и всяка писменост
  2. font-display: swap със съгласувани метрики на резервния шрифт
  3. Самостоятелно хостнат с дълги cache headers и preload за критичното тегло
  4. Или пропуснете шрифтовете изцяло и използвайте системния стек

Направете това веднъж и си връщате няколкостотин килобайта от началната страница, печелите няколкостотин милисекунди възприемана производителност и премахвате зависимост от трета страна по пътя. Малко промени имат по-добро съотношение между усилие и резултат.

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

Често задавани въпроси

Поддържат ли се вариативните шрифтове навсякъде?
Да — всеки браузър, който има значение, поддържа вариативни шрифтове от години. Колебанието, което понякога чувате, е мускулна памет от ерата на статичните шрифтове; това не е реален проблем със съвместимостта през 2026 г.
Трябва ли ръчно да правя поднабори на шрифтовете си?
За сайтове само на Latin — да. Latin поднаборът е приблизително наполовина по-малък от пълния многоезичен файл. За многоезични сайтове използвайте `unicode-range`, за да зареждате всяка писменост като отделен файл, така че посетителите да изтеглят само това, от което съдържанието им реално се нуждае.
Защо font-display: swap понякога причинява грозен проблясък?
Защото метриките на резервния шрифт се различават от тези на персонализирания, така че думите се пренареждат, когато смяната се случи. Използвайте `size-adjust`, `ascent-override` и `descent-override` върху резервния шрифт, за да съвпаднат с метриките на персонализирания — проблясъкът става почти невидим.
Google Fonts наистина ли е privacy проблем?
Няколко решения на европейски съдилища са постановили, че зареждането от `fonts.gstatic.com` предава IP адреса на посетителя на трета страна без съгласие, което според някои тълкувания е нарушение на GDPR. Самостоятелният хостинг премахва въпроса напълно и обикновено така или иначе е по-бърз.

Източници и допълнително четене

  1. MDN — `@font-face` and `font-display`
  2. MDN — Variable fonts guide
  3. web.dev — Reduce web font size
За автора
The Wux Webtools Team

Последно обновление:

Продължете да четете