Аудит кода проекта на 1С-Битрикс
Проект работает, но каждое изменение превращается в лотерею: правишь форму обратной связи — ломается корзина. Новый разработчик тратит неделю, чтобы разобраться в структуре. Скорость разработки падает с каждым месяцем. Это симптомы накопленного технического долга, и аудит кода — способ его измерить, задокументировать и спланировать устранение.
Что проверяется при аудите
Аудит Битрикс-проекта существенно отличается от аудита произвольного PHP-приложения. Битрикс навязывает свои паттерны — компоненты, шаблоны, инфоблоки, агенты — и критерии качества привязаны к ним.
Архитектура инфоблоков. Инфоблоки — центральное хранилище данных в Битрикс. Типичные проблемы:
- Использование одного инфоблока для разнородных сущностей (товары и статьи в одном месте)
- Свойства типа «Строка» вместо «Справочник» или «Привязка к элементу» — невозможность фильтрации и связей
- Отсутствие составных индексов на таблицах
b_iblock_element_propertyдля часто используемых фильтров - Хранение данных в
PREVIEW_TEXT/DETAIL_TEXTвместо отдельных свойств — потеря структурированности
Компоненты и шаблоны. Проверяем:
- Бизнес-логика в
template.phpвместоresult_modifier.phpили кастомного компонента - Прямые SQL-запросы через
$DB->Query()вместо ORM или API инфоблоков - Неиспользуемые параметры компонентов, копипаст между шаблонами
- Кастомизация стандартных компонентов через модификацию ядра (вместо
class.phpнаследования)
init.php. Файл /bitrix/php_interface/init.php — главный индикатор здоровья проекта. На плохих проектах он содержит тысячи строк: обработчики событий, функции, классы, SQL-запросы — всё в одном файле. На хороших — только подключение автолоадера и регистрация обработчиков.
Производительность запросов. Включаем $DB->ShowSQLStat = true и анализируем количество SQL-запросов на страницу. Нормально: 30-80 запросов. Проблема: 300+ запросов из-за вызовов CIBlockElement::GetList() в цикле (N+1 проблема).
Результат аудита
Отчёт содержит не абстрактные рекомендации, а конкретный список:
| Проблема | Файл/Модуль | Критичность | Рекомендация |
|---|---|---|---|
| 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 |
Средняя | Декомпозиция на модули, подключение через автолоадер |
Критичность определяется по влиянию на производительность, безопасность и стоимость поддержки. Отчёт приоритизирован — сверху то, что нужно исправлять первым.
Инструменты
- phpstan / psalm — статический анализ, выявление обращений к несуществующим методам и свойствам
- PHP_CodeSniffer — проверка соответствия стандартам кодирования
-
Битрикс «Монитор производительности» (
perfmon) — профилирование SQL и PHP - Xdebug + Cachegrind — детальный профайлинг для выявления узких мест
Аудит занимает 2-3 рабочих дня для среднего проекта. На выходе — документ, по которому можно планировать рефакторинг с понятными приоритетами и оценками трудозатрат.







