Диагностика техдолга и план рефакторинга: аудит кода 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Диагностика техдолга и план рефакторинга: аудит кода 1С-Битрикс
Простой
~2-3 дня
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1330
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    924
  • 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 Appointment Booking Widget for a Medical Center
    672
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    815
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    714
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1051

Проблема: каждое изменение — лотерея

Проект работает, но правишь форму обратной связи — ломается корзина. Новый разработчик тратит неделю на разбор структуры, на добавление простой страницы — два дня. Каталог грузится 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 месяца за счёт сокращения времени разработки.

Как проходит аудит: пошагово

  1. Сбор кода и базы — копируем репозиторий и дамп.
  2. Профилирование — запускаем монитор производительности на типовых страницах.
  3. Статический анализ — прогоняем phpstan/psalm, ищем ошибки и нарушения.
  4. Ручной аудит — проверяем инфоблоки, компоненты, init.php, SQL.
  5. Формирование отчёта — таблица проблем, приоритеты, рекомендации.

Наш кейс: 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.