Налаштування preload/prefetch ресурсів для 1С-Бітрікс

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

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

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

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

  • 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

Налаштування preload/prefetch ресурсів для 1С-Bitrix

Браузер завантажує HTML, розбирає його, знаходить <link rel="stylesheet"> на 5-й строці, іде за CSS, чекає, розбирає CSS, знаходить шрифти в @font-face, іде за шрифтами — це критична ланцюг запитів, яка блокує рендеринг. preload дозволяє повідомити браузер про потрібні ресурси заздалегідь, до того, як парсер їх знайде. prefetch завантажує ресурси, які знадобляться на наступній сторінці.

Різниця між preload і prefetch

<link rel="preload"> — високий пріоритет, ресурс потрібен на поточній сторінці негайно. Браузер починає завантаження до обробки основного HTML. Якщо ресурс не буде використаний протягом 3 секунд після завантаження — браузер видаст попередження в консолі.

<link rel="prefetch"> — низький пріоритет, ресурс знадобиться на наступній сторінці. Завантажується в фоні, кладеться в кеш. Відмінно працює для завантаження JS наступного розділу каталогу, поки користувач читає поточну сторінку.

<link rel="preconnect"> — встановлює TCP-з'єднання та TLS-handshake до того, як ресурс запитаний. Корисно для зовнішніх доменів: CDN, Google Fonts, Yandex.Metrica.

Додавання preload у шаблон Bitrix

Шаблон сайту в Bitrix — /bitrix/templates/[template_name]/header.php. Додайте в <head> перед основними тегами:

<?php
// Отримуємо хеш-версію файлу для cache busting
$cssVersion = filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/templates/.default/styles.css');
$jsVersion = filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/js/main/core/core.js');
?>
<head>
    <meta charset="utf-8">

    <!-- Preload критичного CSS (рендеринг блокується без нього) -->
    <link rel="preload" href="/bitrix/templates/.default/styles.css?v=<?=$cssVersion?>"
          as="style" onload="this.onload=null;this.rel='stylesheet'">
    <noscript>
        <link rel="stylesheet" href="/bitrix/templates/.default/styles.css?v=<?=$cssVersion?>">
    </noscript>

    <!-- Preload шрифту (as="font" обов'язковий, інакше пріоритет неправильний) -->
    <link rel="preload" href="/bitrix/templates/.default/fonts/roboto.woff2"
          as="font" type="font/woff2" crossorigin>

    <!-- Preconnect до зовнішніх ресурсів -->
    <link rel="preconnect" href="https://mc.yandex.ru">
    <link rel="preconnect" href="https://www.googletagmanager.com">

    <!-- DNS-prefetch як fallback для старих браузерів -->
    <link rel="dns-prefetch" href="//mc.yandex.ru">
</head>

Програмний preload через API Bitrix

Bitrix надає методи для управління заголовками Link через клас \Bitrix\Main\Page\Asset:

// У компоненті або шаблоні
$asset = \Bitrix\Main\Page\Asset::getInstance();

// Preload JS-файлу
$asset->addJs('/bitrix/js/ui/ui.js', [
    'rel' => 'preload',
    'as' => 'script'
]);

// Preload CSS
$asset->addCss('/bitrix/templates/.default/critical.css', [
    'rel' => 'preload'
]);

Через HTTP-заголовок з обробника OnPageStart:

AddEventHandler('main', 'OnPageStart', function() {
    header('Link: </bitrix/templates/.default/styles.css>; rel=preload; as=style', false);
    header('Link: </bitrix/templates/.default/fonts/roboto.woff2>; rel=preload; as=font; crossorigin', false);
});

Prefetch для каталогу

Якщо користувач на головній сторінці, висока ймовірність переходу в каталог. Prefetch основного JS каталогу:

<?php
// У footer.php головної сторінки
if (defined('IS_INDEX_PAGE') && IS_INDEX_PAGE):
?>
<link rel="prefetch" href="/bitrix/js/catalog/catalog.js">
<link rel="prefetch" href="/catalog/">
<?php endif; ?>

Prefetch HTML-сторінки (/catalog/) кладе її в кеш браузера — перехід буде миттєвим. Але це працює лише якщо сторінка має правильні заголовки кешування.

Critical CSS для Bitrix

Найбільший прибуток дає inline critical CSS — стилі, необхідні для рендеринга видимої частини сторінки, вбудовані прямо в HTML. Це усуває блокуючий CSS-запит повністю.

Інструмент для виділення critical CSS:

npm install -g critical
critical --base /var/www/bitrix/public_html \
         --src index.html \
         --css bitrix/templates/.default/styles.css \
         --width 1300 --height 900 \
         --inline --extract

Вставте отриманий critical CSS у шаблон Bitrix у тег <style> в <head>, основний CSS завантажуйте асинхронно через preload з onload як показано вище.

Типові помилки

Preload без as — браузер не знає тип ресурсу, завантажує з неправильним пріоритетом і кешує окремо. Ресурс завантажується двічі: один раз через preload, другий — коли парсер знаходить тег <script> або <link>.

Preload шрифтів без crossorigin — CORS-запит до того ж домену вимагає crossorigin для шрифтів. Без нього браузер завантажує шрифт двічі.

Занадто багато preload — пріоритет у всіх = пріоритет ні у кого. Максимум 3–5 preload на сторінку для дійсно критичних ресурсів.