Аудит коду 1С-Бітрікс: діагностика технічного боргу та план рефакторингу
Проблема: кожна зміна — лотерея
Проєкт працює, але правиш форму зворотного зв'язку — ламається кошик. Новий розробник витрачає тиждень на розбір структури, на додавання простої сторінки — два дні. Каталог завантажується 5 секунд через N+1 запитів — клієнти йдуть. Кожна секунда завантаження коштує 100 000 грн втраченого виторгу. Швидкість розробки падає, технічний борг зростає. Ми знаємо, як це виправити. Наш аудит коду — об'єктивний спосіб виміряти техборг, задокументувати проблеми та спланувати рефакторинг. За 10 років ми провели аудит понад 50 проєктів і знаємо типові вузькі місця Бітрікс-розробки. Наша команда має 10+ років досвіду та реалізувала 50+ проєктів. Ми гарантуємо якість аудиту, маємо сертифікати та багаторічний досвід з 1С-Бітрікс.
Які проблеми типові для Бітрікс-проєктів?
На проєкті 3–5 розробників пишуть кожен у своєму стилі. init.php розрісся до 2000 рядків обробників, половина не використовується. SQL-запити розкидані по шаблонах. Інфоблоки створювалися без структури — в одному товари, статті та банери. Кожен фікс займає півдня, правка ризикує зламати сусідній функціонал. Аудит системно виявляє вузькі місця та дає план дій із конкретними термінами. Ми не просто звітуємо — показуємо, як виправити кожну проблему та що дасть рефакторинг у цифрах. Інвестиція в аудит окупається за 2 місяці, економія до 2000 грн щомісяця на розробці.
Коли потрібен аудит коду?
Ознаки, що вказують на необхідність аудиту:
- Кожен реліз приносить несподівані баги — регресії в непов'язаних модулях.
- Додавання нового функціоналу займає все більше часу.
- Команда боїться рефакторити старий код — немає розуміння, що зламається.
- Проєкт гальмує при зростанні навантаження: сторінки генеруються за 3+ секунди.
Відмінність аудиту коду Бітрікс від code review
Бітрікс нав'язує свої патерни — компоненти, шаблони, інфоблоки, агенти. Критерії якості прив'язані до них. Звичайний PHP-аудит не враховує специфіку API: CIBlockElement, ORM, теговане кешування, події. Ми перевіряємо не лише синтаксис, а й відповідність best practices платформи.
Що перевіряється: три головні точки
Архітектура інфоблоків. Типові прорахунки: один інфоблок для різнорідних сутностей (товари та статті разом); властивості типу «Рядок» замість «Довідник» — неможливість фільтрації; відсутність складених індексів на b_iblock_element_property; зберігання даних у PREVIEW_TEXT замість окремих полів.
Компоненти та шаблони. Бізнес-логіка в template.php замість result_modifier.php — антипатерн. Прямі SQL через $DB->Query() замість ORM. Кастомізація через модифікацію ядра замість успадкування в class.php — проблеми при оновленнях.
init.php. Головний індикатор здоров'я. На проблемних проєктах — тисячі рядків: обробники, функції, класи, SQL. На хороших — тільки автолоадер і реєстрація обробників. Аудит одразу виявляє такі «чорні діри».
Як аудит коду підвищує продуктивність?
Ми використовуємо монітор продуктивності (perfmon) і вмикаємо $DB->ShowSQLStat = true. Рахуємо SQL-запити на сторінку. Норма: 30–80. Проблема: 300+ через CIBlockElement::GetList() у циклі (N+1). Також профілюємо PHP через Xdebug + Cachegrind. Рефакторинг після аудиту підвищує продуктивність на 40–60%, що в 2-3 рази краще за випадкові правки.
Інструменти статичного аналізу: phpstan/psalm — знаходять звернення до неіснуючих методів. PHP_CodeSniffer — перевіряє стандарти кодування.
За статистикою, після аудиту та усунення проблем продуктивність зростає на 40–60%. Аудит окупається за 2 місяці за рахунок скорочення часу розробки.
Як проходить аудит: покроково
- Збір коду та бази — копіюємо репозиторій та дамп.
- Профілювання — запускаємо монітор продуктивності на типових сторінках.
- Статичний аналіз — прогоняємо phpstan/psalm, шукаємо помилки та порушення.
- Ручний аудит — перевіряємо інфоблоки, компоненти, init.php, SQL.
- Формування звіту — таблиця проблем, пріоритети, рекомендації.
Наш кейс: N+1 в каталозі інтернет-магазину
Ми вели проєкт інтернет-магазину, де сторінка каталогу генерувалася 5 секунд. Аналіз показав: у циклі по 50 товарах для кожного виконувалося 6 додаткових запитів для властивостей — всього 301 запит. Після рефакторингу з CIBlockElement::GetList() і правильним $arSelect кількість запитів скоротилася до 3, час — до 0.3 секунди. Аудит ефективніший за ручне тестування в 3–5 разів для виявлення таких вузьких місць.
Що входить у звіт
Після аудиту ви отримуєте:
- Таблицю проблем із файлом, рядком, критичністю та рекомендацією.
- Пріоритизований план усунення з оцінкою трудозатрат.
- Рекомендації щодо покращення архітектури та продуктивності.
- Приклади коду для виправлення типових помилок.
| Проблема | Файл/Модуль | Критичність | Рекомендація |
|---|---|---|---|
| SQL у шаблоні компонента | /bitrix/templates/main/components/.../template.php:45 |
Висока | Винести в result_modifier.php, використовувати CIBlockElement::GetList() |
| N+1 при вибірці властивостей | Компонент catalog.section (кастомний) |
Висока | Використовувати GetNextElement() з PROPERTY_* у $arSelect |
| init.php 2000+ рядків | /bitrix/php_interface/init.php |
Середня | Декомпозиція на модулі, підключення через автолоадер |
| Помилка | Наслідок | Рішення |
|---|---|---|
CIBlockElement::GetList() у циклі |
300+ SQL запитів на сторінку | Один запит з фільтром по ID |
| JSON у рядковій властивості | Неможливість фільтрації | Виділити окремі властивості або HL-блок |
Прямий $DB->Query() |
Складність міграцій | Переписати на ORM |
Як замовити аудит?
Зв'яжіться з нами для попередньої оцінки вашого проєкту. Ми надамо комерційну пропозицію із зазначенням термінів та вартості. Замовте аудит і отримайте детальний план рефакторингу з пріоритетами та термінами.
Рекомендуємо ознайомитися з документацією API інфоблоків для розуміння best practices.







