Оптимізація рендерингу сторінок 1С-Бітрікс: діагностика та рішення

Оптимізація рендерингу сторінок 1С-Бітрікс — наша спеціалізація. Ми стикалися з ситуацією, коли PageSpeed Insights показує 38 балів при LCP 4.2 секунди. TTFB — 1.8 с, а в HTML вже відданий повний контент. Проблема не в мережі і не в клієнтському JS — сторінка повільно формується на сервері. Інструме
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Оптимізація рендерингу сторінок 1С-Бітрікс: діагностика та рішення
Середній
~1-2 тижні

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • 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
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1161

Оптимізація рендерингу сторінок 1С-Бітрікс — наша спеціалізація. Ми стикалися з ситуацією, коли PageSpeed Insights показує 38 балів при LCP 4.2 секунди. TTFB — 1.8 с, а в HTML вже відданий повний контент. Проблема не в мережі і не в клієнтському JS — сторінка повільно формується на сервері. Інструментарій Бітрікс для діагностики є, але ним рідко користуються правильно. Наш досвід показує: у 80% випадків вузьким місцем виявляється неоптимальне кешування або N+1 запити в шаблонах. Особливо часто страждають сторінки каталогу з сотнями товарів — там кількість SQL може перевалювати за 400. Без системного підходу виправлення одного вузького місця може не дати ефекту, якщо не налаштоване кешування на всіх рівнях. Оптимізація рендерингу сторінок 1С-Бітрікс потребує комплексного аудиту та послідовних дій.

Чому сторінка рендериться повільно?

Основні причини:

  • Компоненти працюють в неузгодженому режимі кешування (CACHE_TYPE=N).
  • Цикли в шаблонах породжують N+1 SQL-запити.
  • Вимкнено теговане кешування.
  • Не налаштований композитний режим.

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

Алгоритм діагностики за 4 кроки:

  1. Увімкніть панель налагодження: константи SHOW_PAGE_EXEC_TIME та SHOW_SQL_STAT в dbconn.php.
  2. Проаналізуйте кількість SQL-запитів та час виконання — норма до 100 запитів за 0.5 с.
  3. Визначте компоненти без кешу або з CACHE_TYPE=N.
  4. Перевірте наявність N+1 запитів у шаблонах (виклики GetByID в циклах).

Діагностика через стандартні інструменти Бітрікс

Вмикаємо панель налагодження:

$_GET["show_page_exec_time"] або константа: define('SHOW_PAGE_EXEC_TIME', true); define('SHOW_SQL_STAT', true); 

Панель у footer сторінки покаже:

  • сумарний час виконання
  • кількість SQL-запитів та їх сумарний час
  • об'єм спожитої пам'яті

Типова картина проблемної сторінки: 400+ SQL-запитів, 1.5–2.5 с на SQL при 0.3 с на PHP. Компоненти працюють в неузгодженому режимі кешування. Документація 1С-Бітрікс рекомендує використовувати теговане кешування для прискорення сторінок.

N+1 запити: виявлення та усунення

Найчастіша причина 400+ запитів — цикл за результатами із запитом всередині. Ця проблема відома як N+1 query problem.

// Погано: запит на кожен елемент foreach ($arResult['ITEMS'] as &$item) { $item['SECTION'] = \CIBlockSection::GetByID($item['IBLOCK_SECTION_ID'])->GetNext(); } 

Виправлення — агрегований запит до циклу:

$sectionIds = array_unique(array_column($arResult['ITEMS'], 'IBLOCK_SECTION_ID'])); $sections = []; $res = \CIBlockSection::GetList([], ['ID' => $sectionIds], false, ['ID', 'NAME', 'CODE']); while ($s = $res->GetNext()) { $sections[$s['ID']] = $s; } foreach ($arResult['ITEMS'] as &$item) { $item['SECTION'] = $sections[$item['IBLOCK_SECTION_ID']] ?? null; } 

Інструменти профілювання

Бітрікс не має вбудованого профайлера на рівні компонентів. Найпростіший спосіб — встановити модуль Bitrix Performance Monitor з Marketplace. Альтернатива — використовувати xhprof/Tideways з кастомною обгорткою. Для швидкої оцінки можна додати в init.php обробник, що виводить 10 найповільніших компонентів, але це потребує акуратності.

Як налаштувати композитний режим?

Композитний режим — вбудований механізм Бітрікс для кешування сторінок цілком із заміною динамічних блоків (кошик, авторизація) через AJAX. Він дає TTFB 50–100 мс для авторизованих користувачів. Однак композит потребує адаптації шаблону — не можна ввімкнути кнопкою без доробки компонентів. Ми рекомендуємо його для проєктів з високими вимогами до швидкості завантаження.

Налаштування композиту: покрокова інструкція
  1. Увімкніть композит в адміністративній панелі: «Налаштування» → «Налаштування продукту» → «Композитний сайт».
  2. Перевірте, що всі динамічні блоки (кошик, форма авторизації) винесені у відкладені функції або AJAX-віджети.
  3. Налаштуйте винятки для сторінок, які не повинні кешуватись (наприклад, сторінка оформлення замовлення).
  4. Перевірте роботу в режимі тестування, увімкнувши композит для адміністраторів.

Порівняння типів кешування

Тип кешування Швидкість Складність налаштування
Звичайне файлове Середня (TTFB 200–500 мс) Низька
Теговане (Bitrix Cache Engine) Висока (TTFB 100–200 мс) Середня
Композитний режим Максимальна (TTFB 50–100 мс) Висока (потребує адаптації шаблонів)

Причини повільної роботи компонентів

Компонент без кешу або з кешем NONE

$APPLICATION->IncludeComponent('bitrix:catalog', '.default', [ 'CACHE_TYPE' => 'N', // <- вбивця продуктивності ]); 

Міняємо на:

'CACHE_TYPE' => 'A', // автоматично за налаштуваннями сайту 'CACHE_TIME' => 3600, // секунди 

Для компонентів, що залежать від користувача (кошик, особистий кабінет), кеш на рівні компонента не працює — тут потрібен AJAX-підхід: віддаємо шаблон з кешу, довантажуємо персональні дані окремим запитом.

Вимкнене кешування в складеному компоненті

Складений компонент (наприклад, bitrix:catalog) керує кешуванням дочірніх. Якщо в налаштуваннях розділу виставлено "Не кешувати" — кеш вимикається для всього дерева, включаючи секції лістингу товарів. Перевіряємо в налаштуваннях сайту: Налаштування → Налаштування продукту → Кешування. Теговане кешування (Bitrix Cache Engine) працює в 3 рази швидше за звичайне файлове — використовуйте його.

Оптимізація шаблонів

Мініфікація PHP-шаблонів. Бітрікс збирає сторінку з десятків include. Кожен include — звернення до файлової системи. На HDD-серверах це 5–15 мс на файл. Рішення — OPcache з opcache.validate_timestamps=0 у продакшні (ручна інвалідація кешу після деплою).

Винесення важких блоків в AJAX. Віджети типу «схожі товари», «нещодавно переглянуті», «популярні в категорії» — кандидати на винесення в AJAX. Основна сторінка рендериться швидко, віджети підвантажуються паралельно.

Приклад результату

Інтернет-магазин будівельних матеріалів, 180 000 SKU. До оптимізації: TTFB 2.1 с, 380 SQL на сторінці категорії. Після: вимкнено CACHE_TYPE=N у трьох компонентах, усунено два N+1, увімкнено OPcache validate_timestamps=0. Результат: TTFB 420 мс (в 5 разів швидше), 38 SQL запитів, LCP 1.9 с. Зниження навантаження на сервер дозволило скоротити витрати на VPS на 2000 грн щомісяця.

Етапи оптимізації

Етап Зміст Термін
Аудит Профілювання топ-5 сторінок, виявлення вузьких місць, звіт з рекомендаціями 1–2 дні
Оптимізація кешу Налаштування кешування компонентів, увімкнення тегованого кешу, перевірка композиту 1–2 дні
Усунення N+1 Рефакторинг шаблонів з агрегованими запитами, оптимізація викликів API 2–5 днів
Композит Налаштування та адаптація шаблону під композитний режим, тестування 2–4 дні
Здача Передача документації, доступів, навчання розробника, гарантія 30 днів 1 день

Що входить в роботу

  • Документація з оптимізації
  • Доступ до сервера та рекомендації
  • Навчання розробника
  • Підтримка 30 днів після здачі

Ми маємо 5 років досвіду з платформою 1С-Бітрікс та реалізували понад 50 проєктів з оптимізації. Оцінимо ваш проект безкоштовно — напишіть нам. Замовте аудит під ключ за 1 день — ми знайдемо вузькі місця. Зв'яжіться з нами для діагностики.