Оптимізація TTFB (Time to First Byte) 1С-Бітрікс

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

Оптимізація TTFB (Time to First Byte) для 1С-Bitrix

TTFB — час від відправки HTTP-запиту до отримання першого байта відповіді. Це чисте серверне час: DNS, TCP-з'єднання, SSL-хендшейк плюс час генерації сторінки. Google PageSpeed вважає хорошим TTFB < 200 мс. У стандартного Bitrix-сайту без оптимізації — 800 мс — 3 секунди.

З чого складається TTFB у Bitrix

Типова розбивка на важкому сайті:

Етап Час Що впливає
DNS + TCP + SSL 20–100 мс Хостинг, CDN, геолокація
Ініціалізація PHP + Bitrix 50–150 мс OPcache, autoload
Завантаження ядра, модулів, пролог 30–100 мс Кількість модулів, include у init.php
SQL-запити до БД 100–2000 мс Індекси, кеш, оптимізація запитів
Виконання компонентів 50–500 мс Кеш компонентів, складність шаблонів
PHP-буфер, обфускатор 10–50 мс Налаштування виводу

На більшості проектів 60–80% TTFB — це SQL-запити. Починати потрібно з них.

OPcache — базова оптимізація PHP

PHP без OPcache компілює кожен файл при кожному запиті. Bitrix при повному завантаженню підключає 200–500 PHP-файлів. OPcache кешує скомпільований байткод:

[opcache]
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0   ; на продакшені — не перевіряти зміни файлів
opcache.revalidate_freq = 0
opcache.fast_shutdown = 1
opcache.enable_cli = 0

validate_timestamps = 0 — критично для швидкості. При цьому OPcache не бачить змін файлів без скидання. Після розгортання скидайте кеш: opcache_reset() або cachetool утилітою. Без цього налаштування OPcache робить stat() для кожного файлу на кожен запит — сотні syscall-ів.

max_accelerated_files = 20000 — Bitrix з типовим набором модулів має 5000–15000 PHP-файлів. Якщо лімітація менше — частина файлів не кешується. Перевіртьте: opcache_get_status()['opcache_statistics']['num_cached_scripts'].

Кеш сторінок та компонентів

Найефективніший спосіб знизити TTFB — не генерувати сторінку зовсім, а відповісти кешованим HTML. Bitrix вміє кешувати на кількох рівнях:

Кеш компонентів ($cache_time у .parameters.php). Стандартний компонент bitrix:catalog.section кешується на годину. При правильному налаштуванні повторний запит сторінки — це 5–20 SQL-запитів замість 100–300.

Managed cache / Composite. Технологія Composite Site в Bitrix ділить сторінку на кешовані та динамічні частини. Кешована частина (головна колонка, меню, шапка) відповідається відразу, динамічна (кошик, лічильник повідомлень) завантажується AJAX. При правильному налаштуванні TTFB основного HTML падає до 50–100 мс.

Ввімкнення Composite: Налаштування → Продуктивність → Складний сайт. Компоненти помічаються як динамічні через CBitrixComponent::setDynamicMode() або через bitrix:catalog.top.menu з параметром DYNAMIC = Y.

HTML-кеш nginx. Найшвидший варіант — nginx відповідає статичний HTML без запуску PHP. Реалізується через nginx FastCGI cache або Varnish перед Bitrix. Потребує правильної інвалідації при оновленні контенту.

Оптимізація пролога та init.php

Кожен запит Bitrix виконує /bitrix/php_interface/init.php. Якщо в ньому підключаються важкі класи, роблять SQL-запити або підключають сторонні бібліотеки — це додається до кожного запиту.

Перевіртьте /bitrix/php_interface/init.php:

  • немає include файлів, які потрібні тільки в конкретних контролерах
  • немає ініціалізації сторонніх SDK (1C-інтеграція, платіжні системи) при кожному запиті
  • немає SQL-запитів у обробниках подій OnPageStart

Lazy-loading через Loader::includeModule() — модулі підключаються тільки там, де вони потрібні. Не підключайте в init.php весь список модулів глобально.

База даних: підключення та запити

Час встановлення з'єднання з MySQL — 1–5 мс при локальному з'єднанні. При виносі БД на окремий сервер — 5–20 мс на TCP-з'єднання. Persistent connections (MYSQL_PCONNECT) дозволяють переиспользувати з'єднання між запитами в рамках PHP-FPM воркера.

У /bitrix/php_interface/dbconn.php:

$DBPersistent = true;  // ввімкнути persistent connections

Persistent connections знижують накладні витрати, але збільшують кількість відкритих з'єднань на сервері MySQL. max_connections у my.cnf повинен бути більший за число PHP-FPM воркерів × число віртуальних хостів.

Вимірювання TTFB по етапам

Інструмент діагностики — панель продуктивності Bitrix (/bitrix/admin/perfmon_panel.php або через піктограму в нижньому правому куті). Ввімкніть профілювання та відкрийте сторінку. Панель покаже:

  • загальний час виконання
  • час SQL-запитів суммарно та по запитам
  • час виконання компонентів
  • кількість файлових операцій кешу

Для зовнішнього вимірювання — curl -o /dev/null -s -w "Time to first byte: %{time_starttransfer}s\n" https://yoursite.ru/. Робіть 3–5 вимірювань: перше може бути з холодним кешем.

Терміни оптимізації

Задача Терміни Зменшення TTFB
Налаштування OPcache 0,5 дня 100–300 мс
Оптимізація SQL (індекси, кеш) 3–5 днів 200–1500 мс
Налаштування кешу компонентів 1–2 дня 100–500 мс
Ввімкнення Composite Site 2–3 дня 300–800 мс
Перехід на Redis-кеш 1 день 20–100 мс
Nginx FastCGI cache 2–3 дня 200–600 мс

Реалістична мета для інтернет-магазину на Bitrix при комплексній оптимізації: TTFB < 300 мс для кешованих сторінок, < 800 мс для динамічних (особистий кабінет, оформлення замовлення).