Оптимізація шрифтів для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Оптимізація шрифтів для 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Оптимізація шрифтів для 1С-Бітрікс

Шрифти — один із найбільш недооцінених джерел затримки при завантаженні сторінок. На типовому Бітрікс-проєкті зустрічається ситуація: сайт підключає 4–6 накреслень Google Fonts через @import прямо в CSS, кожен @import блокує рендер, браузер чекає CSSOM, а користувач бачить порожню сторінку або «мерехтіння невидимого тексту» (FOIT). У Lighthouse це фіксується як «Ensure text remains visible during webfont load» і напряму б'є по метриці LCP.

Як Бітрікс підключає шрифти за замовчуванням

У більшості тем шрифти підключаються одним із трьох способів:

  1. @import url('https://fonts.googleapis.com/...') всередині template_styles.css — найповільніший варіант: браузер виявляє запит лише після завантаження CSS.
  2. <link> у header.php шаблону без атрибутів preconnect і preload.
  3. Пряме підключення .woff/.woff2 через CDN без кешуючих заголовків.

Бітрікс не керує шрифтами через ядро — все живе в шаблоні, тому змінювати потрібно саме там, а не через налаштування модуля main.

Ключові техніки оптимізації

Self-hosted шрифти замість Google Fonts

Завантаження шрифтів з зовнішнього CDN додає DNS-lookup + TCP handshake + TLS negotiation — сумарно від 100 до 300 мс на холодному з'єднанні. Переносимо шрифти на власний сервер:

# Завантажуємо через google-webfonts-helper або npx
npx google-webfonts-helper --family="Roboto" --subsets="latin,cyrillic" --variants="400,700"

Файли кладемо в /local/templates/[template]/fonts/, CSS — у fonts.css:

@font-face {
    font-family: 'Roboto';
    src: url('/local/templates/main/fonts/roboto-400.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
    unicode-range: U+0400-045F, U+0490-0491; /* лише кирилиця */
}

font-display: swap — обов'язково. Без нього браузер блокує відрисовку тексту до завантаження шрифту.

Preload для критичних накреслень

У header.php шаблону додаємо preload для накреслення, що використовується на першому екрані:

// header.php
$APPLICATION->AddHeadString(
    '<link rel="preload" href="/local/templates/main/fonts/roboto-400.woff2" as="font" type="font/woff2" crossorigin="anonymous">'
);

Preload працює для одного-двох накреслень. Preload усіх варіантів — контрпродуктивний: браузер завантажує їх з високим пріоритетом, конкуруючи з HTML і критичним CSS.

Subsetting: видаляємо зайві гліфи

Повний Roboto важить 150–200 КБ на накреслення. Для україномовного сайту потрібні лише latin + cyrillic. За допомогою pyftsubset (fonttools):

pyftsubset roboto-regular.ttf \
    --unicodes="U+0020-007E,U+0400-045F,U+0490-0491,U+00A0" \
    --flavor=woff2 \
    --output-file=roboto-400-subset.woff2

Результат — файл 20–35 КБ замість вихідних 150+ КБ.

Variable fonts

Якщо дизайн використовує кілька накреслень однієї гарнітури (Regular, Medium, Bold), розгляньте variable font — один файл замінює кілька:

@font-face {
    font-family: 'Roboto';
    src: url('/fonts/Roboto-VF.woff2') format('woff2 supports variations'),
         url('/fonts/Roboto-VF.woff2') format('woff2');
    font-weight: 100 900;
    font-display: swap;
}

Variable font Roboto важить ~75 КБ і покриває всі ваги — проти 4×30 КБ = 120 КБ для окремих файлів із subsets.

Кейс: інтернет-магазин будівельних матеріалів

Магазин на Бітрікс «Бізнес» підключав 3 сімейства через Google Fonts: Roboto (3 накреслення), Open Sans (2), Oswald (1). Разом 6 HTTP-запитів до fonts.googleapis.com + 6 запитів до fonts.gstatic.com. render-blocking затримка становила 480–620 мс, LCP на мобільних — 4,8 с.

Після перенесення на self-hosted із subsetting і одним preload для Roboto 400:

  • LCP знизився до 2,1 с
  • Сумарна вага шрифтів: з 820 КБ до 94 КБ
  • Render-blocking шрифтів: 0 мс (завдяки font-display: swap + preload)

Роботи зайняли 2 дні: аналіз поточного підключення, підготовка subset-файлів, правка header.php і fonts.css, тестування в Lighthouse та WebPageTest.

Діагностика проблем

Швидка перевірка через DevTools: вкладка Network → Font. Якщо в стовпці Initiator написано stylesheet (а не preload), шрифт завантажується реактивно, а не проактивно. Метрика FCP у Lighthouse нижче 1,8 с за наявності render-blocking шрифтів — практично недосяжна без описаних оптимізацій.

Терміни

Масштаб Склад Термін
Базовий Self-hosted + font-display: swap + preload 1–2 дні
Повний Subsetting, variable fonts, аудит усіх шаблонів, налаштування заголовків кешування 3–5 днів