Оптимизация шрифтов сайта (font-display, preload, subset)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Оптимизация шрифтов сайта (font-display, preload, subset)
Средняя
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Оптимизация шрифтов: font-display, preload, subset

Кастомные шрифты — распространённая причина медленного FCP и CLS. Браузер должен загрузить шрифт до отображения текста (или показать невидимый текст / системный шрифт). Правильная настройка устраняет оба симптома.

font-display — управление рендерингом

@font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap; /* показать fallback сразу */
}
Значение Поведение Когда использовать
auto Зависит от браузера Не использовать
block Скрыть текст до загрузки (FOIT) Иконочные шрифты
swap Fallback → основной при загрузке Основной текст
fallback 100мс скрыт, потом swap Баланс FCP/CLS
optional Только если уже закеширован Некритичные шрифты

Для основного текста — swap. Для декоративных заголовков где FOUT (Flash of Unstyled Text) допустим — swap. Для иконочных шрифтов — block (иначе иконки отобразятся как символы).

Preload критичного шрифта

<head>
    <!-- Preload до загрузки CSS -->
    <link rel="preload"
          href="/fonts/inter-regular.woff2"
          as="font"
          type="font/woff2"
          crossorigin>

    <!-- Если несколько начертаний — preload только используемые above-the-fold -->
    <link rel="preload" href="/fonts/inter-700.woff2" as="font" type="font/woff2" crossorigin>
</head>

Preload только шрифты, используемые в первом экране. Preload всех начертаний замедляет загрузку.

Subset — только нужные символы

Полный Inter содержит латиницу, кириллицу, греческий, иврит — ~500 кБ. Подмножество только с нужными символами — 30–80 кБ.

/* unicode-range для кириллицы */
@font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-cyrillic.woff2') format('woff2');
    font-weight: 400;
    font-display: swap;
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* Латиница — отдельный файл */
@font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-latin.woff2') format('woff2');
    font-weight: 400;
    font-display: swap;
    unicode-range: U+0000-00FF, U+0131, U+0152-0153;
}

Браузер загружает только файлы с символами, встречающимися на странице.

Генерация subset через pyftsubset

# Установка
pip install fonttools brotli

# Создание subset с кириллицей + базовой латиницей
pyftsubset inter-regular.ttf \
    --unicodes="U+0020-007E,U+00A0-00FF,U+0400-045F,U+0490-0491" \
    --layout-features="kern,liga,calt" \
    --flavor=woff2 \
    --output-file=inter-regular-subset.woff2

Self-hosted vs Google Fonts

Google Fonts вводит DNS lookup + connection overhead для каждого нового пользователя. Self-hosted шрифты:

  • Убирают cross-origin задержку
  • Позволяют использовать HTTP/2 push или preload
  • Работают без зависимости от стороннего CDN
# Скачать шрифт с правильными subset
# Используя google-webfonts-helper (gwfh.mranftl.com)
# или fontsource npm пакет
npm install @fontsource-variable/inter
/* Fontsource — автоматически включает нужные файлы */
@import '@fontsource-variable/inter/cyrillic.css';
@import '@fontsource-variable/inter/latin.css';

Компенсация CLS от font-swap

/* Подобрать метрики для fallback шрифта */
@font-face {
    font-family: 'InterFallback';
    src: local('Arial');
    ascent-override:  90%;
    descent-override: 22%;
    line-gap-override: 0%;
    size-adjust: 107%;
}

body {
    font-family: 'Inter', 'InterFallback', sans-serif;
}

Инструменты для подбора значений: fontaine npm-пакет или next/font (для Next.js — автоматически).

Variable fonts

Один файл вместо отдельных файлов для каждого weight:

@font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-variable.woff2') format('woff2-variations');
    font-weight: 100 900; /* диапазон */
    font-display: swap;
}

/* Использование */
h1 { font-weight: 700; }
body { font-weight: 400; }
.light { font-weight: 300; }

Variable font Inter (~170 кБ subset кириллица+латиница) vs. отдельные файлы для 400 + 700 (~120 кБ). Выгодно при ≥ 3 начертаниях.

Срок оптимизации: 4–8 часов: скачать шрифты, сделать subset, настроить preload и CSS.