Об'єднання CSS та JS файлів 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Об'єднання CSS та JS файлів 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

Об'єднання CSS та JS файлів 1С-Бітрікс

На проєкті, який розроблявся кілька років кількома командами, типова ситуація: кожен модуль, кожен компонент, кожен віджет підключає власні CSS та JS файли. Chrome DevTools → Network показує 60–120 запитів лише до стилів і скриптів. Навіть при HTTP/2 (який теоретично мультиплексує запити) це створює overhead на DNS lookup, TCP handshake, TLS negotiation для кожного домену та пріоритизацію запитів. На мобільних мережах 100 дрібних запитів завжди гірші, ніж 5 великих.

Вбудований механізм об'єднання Бітрікс

Бітрікс надає два інструменти для об'єднання файлів: через CMain::AddCSSLink() / CMain::AddHeadScript() з увімкненою мінімізацією (Налаштування → Продуктивність → Стиснення), а також через компонент bitrix:main.include з параметрами пакетування.

При увімкненій мінімізації Бітрікс групує CSS в один файл /bitrix/cache/css/<hash>.css, а JS — у /bitrix/cache/js/<hash>.js. Ключове обмеження: об'єднуються лише файли, зареєстровані через PHP-API до виклику ShowHead(). Файли, підключені через <link> у шаблонах безпосередньо, не потраплять до пакету.

Проблеми та їх розв'язання

Порядок підключення. При об'єднанні порядок CSS-правил змінюється, що ламає стилі, засновані на специфічності каскаду. Рішення: явно контролювати порядок через \Bitrix\Main\Page\Asset::addCss() з пріоритетами, або розбити на два бандли — «базовий» (reset, grid, типографіка) та «компонентний».

Inline-стилі та скрипти. Багато компонентів Бітрікс генерують теги <style> і <script> прямо в HTML — вони не об'єднуються автоматично. Для кастомних компонентів це переноситься у файли через $this->addExternalCSS() та $this->addExternalJS().

Умовне завантаження. Деякі скрипти потрібні лише на конкретних сторінках (редактор форм, слайдер на головній, карта на сторінці контактів). Об'єднання всього в один бандл збільшує його розмір. Правильний підхід — розділити на критичний бандл (завантажується скрізь) і сторінкові бандли (завантажуються за умовою).

Webpack/Vite як альтернатива вбудованим інструментам

Для проєктів з активним фронтендом вбудованого механізму об'єднання Бітрікс недостатньо. Сучасний підхід — збірка через Webpack або Vite з окремим webpack.config.js для бітрікс-шаблону. Переваги: tree shaking (видалення невикористаного коду), code splitting, обробка SCSS/LESS, транспіляція TypeScript.

Приклад структури для Vite + Бітрікс-шаблон:

local/templates/mytemplate/
├── src/
│   ├── css/
│   │   ├── main.scss
│   │   └── components/
│   ├── js/
│   │   ├── app.js
│   │   └── pages/
├── dist/       ← сюди збирає Vite
│   ├── app.[hash].css
│   └── app.[hash].js
├── header.php  ← підключає dist/
└── vite.config.js

header.php підключає файли з dist/ через CMain::AddCSSLink() — так вони потрапляють до загального механізму кешування Бітрікс.

Кейс: портал із кількома командами розробки

B2B-портал, 5 років у розробці, три команди змінилися. На сторінці каталогу: 47 CSS-запитів (сумарно 890 KB без стиснення), 68 JS-запитів (сумарно 1,4 MB). Аудит показав: 12 CSS файлів дублювалися (ті самі нормалізатори підключені в різних компонентах), 8 JS-бібліотек завантажувалися в кількох версіях одночасно (jQuery 1.9, 2.1 та 3.6 на одній сторінці).

Що зробили:

  • Аудит усіх підключень через перехоплення CMain::AddCSSLink() і AddHeadScript() з логуванням
  • Уніфікація бібліотек: єдина версія jQuery, видалення дублів
  • Перенесення всіх прямих <link> до API Бітрікс
  • Налаштування збірки через Vite для нового коду, упаковка legacy в єдиний бандл
  • Code splitting: критичний бандл + 4 сторінкові бандли

Результат: 47 CSS-запитів → 3, 68 JS-запитів → 5. Сумарна вага CSS+JS (після gzip) знизилася з 850 KB до 210 KB завдяки видаленню дублів і tree shaking.

Терміни

Тип проєкту Зміст робіт Термін
Простий сайт (1 шаблон, <30 компонентів) Перенесення підключень на API, увімкнення мінімізації 1–2 дні
Середній проєкт (кастомний фронтенд, кілька шаблонів) Аудит + уніфікація бібліотек + налаштування збірки 3–7 днів
Великий портал (безліч команд, legacy-код) Повний аудит, рефакторинг підключень, налаштування Webpack/Vite 7–20 днів

Навантажувальне тестування після об'єднання обов'язкове — у рідкісних випадках порядок завантаження скриптів важливий, і його порушення призводить до JS-помилок на конкретних сторінках.