Проблема: каждое изменение — лотерея
Проект работает, но правишь форму обратной связи — ломается корзина. Новый разработчик тратит неделю на разбор структуры, на добавление простой страницы — два дня. Каталог грузится 5 секунд из-за N+1 запросов — клиенты уходят. Каждая секунда загрузки обходится в 100 000 рублей потерянной выручки. Скорость разработки падает, технический долг растёт. Мы знаем, как это исправить. Наш аудит кода — объективный способ измерить техдолг, задокументировать проблемы и спланировать рефакторинг. За 10 лет мы провели аудит более 50 проектов и знаем типичные узкие места Битрикс-разработки.
Какие проблемы типичны для Битрикс-проектов?
На проекте 3–5 разработчиков пишут каждый в своём стиле. init.php разросся до 2000 строк обработчиков, половина не используется. SQL-запросы разбросаны по шаблонам. Инфоблоки создавались без структуры — в одном товары, статьи и баннеры. Каждый фикс занимает полдня, правка рискует сломать соседнюю функциональность. Аудит системно выявляет узкие места и даёт план действий с конкретными сроками. Мы не просто отчитываемся — показываем, как исправить каждую проблему и что даст рефакторинг в цифрах.
Когда нужен аудит кода?
Признаки, указывающие на необходимость аудита:
- Каждый релиз приносит неожиданные баги — регрессии в несвязанных модулях.
- Добавление нового функционала занимает всё больше времени.
- Команда боится рефакторить старый код — нет понимания, что сломается.
- Проект тормозит при росте нагрузки: страницы генерируются за 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.
Инструменты статического анализа: 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.







