Профілювання PHP-коду 1С-Бітрікс (Xdebug, Blackfire)

Профілювання PHP-коду 1С-Бітрікс (Xdebug, Blackfire) Ми часто стикаємося з ситуацією: сайт на Бітрікс завантажується 4–6 секунд, хоча nginx і MySQL в порядку. PHP витрачає левову частку часу на незрозумілі операції. Без профілювальника — ворожіння. З профілювальником — точні цифри: яка функція, с
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Профілювання PHP-коду 1С-Бітрікс (Xdebug, Blackfire)
Середній
~1-2 тижні

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

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

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

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

Профілювання PHP-коду 1С-Бітрікс (Xdebug, Blackfire)

Ми часто стикаємося з ситуацією: сайт на Бітрікс завантажується 4–6 секунд, хоча nginx і MySQL в порядку. PHP витрачає левову частку часу на незрозумілі операції. Без профілювальника — ворожіння. З профілювальником — точні цифри: яка функція, скільки разів викликана, скільки часу зайняла. Розбираємо два робочих інструменти — Xdebug і Blackfire — і показуємо, як за їх допомогою знайти та усунути вузькі місця. На основі нашого досвіду (10+ років, 500+ проєктів) гарантуємо прозорий результат. Економія бюджету на розробку після оптимізації може бути значною та залежить від складності.

Чому профілювання критичне для Бітрікс?

У складних каталогах із тисячами інфоблоків і компонентів продуктивність падає непомітно. Одна сторінка може викликати CIBlockElement::GetList() 40 разів без кешу. Або агент кожні 5 хвилин перераховує кошики. Без профілювальника такі проблеми шукаються годинами. З профілювальником — 10 хвилин на замір і одразу зрозуміло, куди дивитися. Економія часу розробника — до 70%.

Xdebug: профілювання через cachegrind

Xdebug — розширення PHP, яке записує трасування у форматі cachegrind. Файл відкривається в KCachegrind або QCacheGrind. Установка та конфігурація:

pecl install xdebug # або apt-get install php8.2-xdebug # php.ini або 99-xdebug.ini [xdebug] zend_extension=xdebug.so xdebug.mode=profile xdebug.output_dir=/tmp/xdebug xdebug.profiler_output_name=callgrind.out.%p.%r xdebug.start_with_request=trigger 

start_with_request=trigger — профілювання тільки за GET-параметром ?XDEBUG_PROFILE=1 або cookie. Не вмикайте always на бойовому — overhead 10–20x. Згідно з документацією Xdebug, режим профілювання призначений для розробки, а не для бойових серверів (xdebug.org/docs/profiler).

Запит із профілюванням:

curl "https://site.ru/catalog/product/?XDEBUG_PROFILE=1" -o /dev/null 

У /tmp/xdebug з'явиться файл callgrind.out.*. Відкриваєте в KCachegrind — дерево викликів і відсоток часу кожної функції.

Що шукати в профілі Бітрікс

Типові вузькі місця, які видно в cachegrind:

  • CIBlockElement::GetList() — викликається десятки разів без кешу. Сумарний час >30% — проблема в кешуванні компонентів.
  • CSQLWhere::GetQuery() — складні фільтри без індексів.
  • CBitrixComponent::includeComponent() — вкладені 20+ компонентів накопичують overhead.
  • CUser::IsAuthorized() — не кешується між викликами.
  • \Bitrix\Main\ORM\Query\Query::exec()fetchAll() на великих вибірках без ліміту.

Який інструмент обрати: Xdebug чи Blackfire?

Критерій Xdebug cachegrind Blackfire
Накладні витрати ~10–20x уповільнення ~2x
Зручність аналізу KCachegrind (десктоп) Веб-інтерфейс, граф
Порівняння профілів Вручну Вбудований diff
CLI-скрипти Так Так
Production Ні Так (з обережністю)
Вартість Безкоштовно Freemium

Blackfire для production працює в 5–10 разів швидше, ніж Xdebug, і підходить для безперервного профілювання. Xdebug краще для глибокого аналізу на dev-сервері.

Blackfire: профілювання з агрегацією

Blackfire — SaaS-рішення. Агент на сервері, PHP-розширення перехоплює виконання, дані на blackfire.io. Установка та конфігурація:

wget -O - https://packages.blackfire.io/gpg.key | apt-key add - echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list apt-get update && apt-get install blackfire blackfire-php # php.ini extension=blackfire.so blackfire.agent_socket=tcp://127.0.0.1:8307 # Авторизація blackfire agent:config --server-id=XXXX --server-token=YYYY blackfire agent:start 

Запуск профілювання:

# CLI blackfire run php artisan bitrix:some-command # Через curl blackfire curl https://site.ru/catalog/ # Через браузерне розширення Blackfire — кнопка Profile на сторінці. 

Практичний алгоритм оптимізації

Покроковий план 1. Базовий замір. Профілюємо сторінку, фіксуємо топ-5 функцій за часом. 2. Аналіз кореня. Дивимося call stack — хто викликає дорогу функцію і скільки разів. Наприклад, `GetList` може бути викликаний 40 разів через цикл у компоненті. 3. Кешування. Вмикаємо кеш компонента (`CACHE_TYPE=A`, `CACHE_TIME=3600`) або кешуємо результат вручну через `\Bitrix\Main\Data\Cache`. 4. Повторний замір. Порівнюємо з baseline. 5. Оптимізація запитів. Прибираємо зайві поля в `$select`, додаємо індекси, переписуємо з `GetList` на D7 ORM.

Чому профілювання потрібно проводити на dev-сервері?

Xdebug додає значну затримку (10–20x), тому його використання на бойовому сервері неприйнятне. Навіть Blackfire з низьким overhead може впливати на реальних користувачів. Dev-сервер з копією даних дає точні заміри без ризику для бізнесу. Якщо бойовий сервер недоступний для профілювання, ми налаштовуємо стейджинг із синхронізацією даних. Зв'яжіться з нами для уточнення деталей налаштування оточення.

Як читати cachegrind-профіль?

KCachegrind показує дерево викликів, де кожен вузол — функція з часом виконання (self vs inclusive). Шукайте функції, у яких inclusive time перевищує 10% від загального часу. Для Бітрікс часто це CIBlockElement::GetList, CSQLWhere::GetQuery і CUser::IsAuthorized. Увімкніть фільтр за модулем bitrix — він відсіче всі функції ядра PHP. Замовте профілювання та отримайте детальний розбір від наших інженерів.

Профілювання агентів і CLI

Для фонових агентів і CLI-скриптів використовуйте XDEBUG_MODE=profile або blackfire run. Приклад:

XDEBUG_MODE=profile php /path/to/script.php blackfire run php /path/to/script.php 

Це дозволяє виявити повільні агенти, які тягнуть продуктивність фону.

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

  • Налаштування Xdebug та/або Blackfire на dev-сервері або стейджингу.
  • Профілювання 3–5 ключових сторінок/скриптів.
  • Детальний звіт із графіками викликів і часом.
  • Рекомендації щодо оптимізації (кешування, індекси, рефакторинг).
  • Повторне профілювання після впровадження правок.
  • Підсумкова документація та консультація команди.

Строки

Задача Строк
Налаштування профілювальника 2–6 годин
Профілювання + звіт по одній сторінці 2–4 години
Комплексний аудит 3–5 сторінок 2–5 днів
Оптимізація вузьких місць від 3 днів

Вартість розраховується індивідуально залежно від обсягу. Ми гарантуємо прозорість — ви отримуєте не просто звіт, а виправлені вузькі місця та вимірювання приросту продуктивності. Зв'яжіться з нами для оцінки вашого проєкту — визначимо фронт робіт і запропонуємо план профілювання. Замовте профілювання та переконайтеся в ефективності.

Додаткові ресурси: Профілювання (програмування) та Xdebug. Згідно з документацією Xdebug, режим профілювання призначений для розробки.