Лучшие практики Bitrix Framework
Собрано из курса «Разработчик Bitrix Framework» и официальной документации. Каждый пункт ссылается на страницы этой базы знаний.
Процессы и организация проекта
- Никогда не правьте код на боевом сайте. Ведите разработку на копии или используйте маркер «Установка для разработки», всегда имейте доступ по FTP/SSH на случай, если админка станет недоступна, держите свежий бэкап наготове. (курс)
- Используйте систему контроля версий, даже если только для файлов проекта. (курс)
- Сначала формализуйте требования, потом код. Просмотрите все случаи использования изменяемого блока и только после этого выбирайте инструмент. (курс)
- Весь свой код — в папку
/local/(шаблоны, компоненты, модули, php_interface). Она не перезаписывается при обновлениях и отделяет кастомизацию от ядра. (курс, документация) - Не меняйте код ядра —
/bitrix/modules/и/bitrix/components/bitrix/. Изменения затрутся при обновлении, лишают техподдержки и ломают систему. (курс)
Кастомизация: порядок выбора средств
От простого к сложному — останавливайтесь на первом работающем варианте (курс):
- Редактирование шаблона сайта и CSS.
- Редактирование страницы (осторожно: PHP-код на странице легко сломать визуальным редактором).
- Шаблон компонента,
result_modifier.php,component_epilog.php. (курс: result_modifier.php) - Обработчики событий. (курс)
- Кастомизация компонента, свой компонент или модуль — последний вариант. (курс: свой компонент, курс: свой модуль, документация)
Свои компоненты и шаблоны размещайте в собственном пространстве имён — пространство bitrix затирается обновлениями.
Работа с данными: ORM и API
- Не обращайтесь к БД напрямую — работайте через API и ORM: структура таблиц меняется между версиями, API сохраняет обратную совместимость. Прямые запросы рискуют целостностью данных. (курс)
- Новый код — на ядре D7 (ORM), а не на устаревших конструкциях
GetListтам, где есть ORM-сущность. (курс: ядро D7, документация: ORM) - Выбирайте только нужные поля в
select, ограничивайте выборки фильтрами и постраничностью — лишние поля иPROPERTY_*тормозят страницу и раздувают кэш. (документация: производительность инфоблоков, курс) - Используйте объекты и коллекции ORM (
save,fill,wakeUp, групповые действия) вместо ручной сборки запросов. (курс: объекты, курс: коллекции, документация) - Фильтры ORM вместо конкатенации SQL. Если SQL неизбежен — только через подготовленные запросы/SqlExpression, никогда не подставляйте пользовательский ввод в строку запроса. (курс: фильтр ORM, документация: SQL-инъекции, документация: query builder)
- Связи между сущностями описывайте в ORM (1:1, 1:N, N:M), а не джойните вручную. (курс, документация)
- Транзакции — для операций, которые должны выполняться атомарно. (документация)
Инфоблоки
- Понимайте архитектуру инфоблоков (версии хранения свойств 1.0/2.0) перед тем как проектировать структуру каталога. (документация, курс)
- Используйте ORM-интеграцию инфоблоков (
ElementTable-классы, генерация ORM-классов) вместоCIBlockElement::GetListв новом коде. (курс: ORM в инфоблоках, курс: генерация классов) - Следите за типовыми проблемами производительности инфоблоков заранее, а не когда проект «встал». (документация)
Компоненты и шаблоны
- Разделяйте логику и представление: логика — в компоненте, вывод — в шаблоне. Не пишите HTML внутри PHP-логики. (курс)
result_modifier.php— для подготовки данных шаблона;component_epilog.php— для того, что должно выполниться независимо от кэша (установка заголовков, счётчики). (курс)- Штатные шаблоны не править — копировать и кастомизировать в своём пространстве имён. (курс)
- При создании своих компонентов сразу закладывайте кэширование и тегированный кэш. (курс: кэширование в своих компонентах, документация: компоненты)
Кэширование
- Не полагайтесь на автокэширование — указывайте время кэширования компонентов осознанно, исходя из периодичности обновления данных. Автокэш включайте перед сдачей проекта, на разработке держите выключенным. (курс: кэширование компонентов, курс: junior)
- Кэшируйте только нужные данные — избыточный кэш не ускоряет, а замедляет. (курс)
- Используйте тегированный кэш (
cache.dependencies) для точечного сброса кэша при изменении данных, а не полную очистку. (курс: тегированный кэш, документация: кэширование) - Сброс кэша по событию: меню и списки сбрасывайте через обработчики изменения элементов, а не по таймеру. (курс: проблемы кэширования меню, курс: примеры)
- Композитный сайт — для высоконагруженных публичных страниц. (документация)
События и агенты
- События — основной механизм расширения штатного поведения: обработчики не ломаются обновлениями, в отличие от правки ядра. (курс, документация)
- Агенты — для периодических фоновых задач; тяжёлые агенты переводите на cron, не на хиты пользователей. (курс, документация: фоновые задачи)
- Не плодите в агентах и событиях тяжёлые запросы без кэша — они выполняются на каждом хите/тике.
Производительность
- Оптимизируйте запросы к БД: индексы, ограничение выборок, постраничка для больших массивов. (курс: оптимизация запросов, курс: постраничка для массивов, документация)
- Ищите узкие места инструментами (SQL-трекер, монитор производительности, отладка), а не догадками. (документация: SQL-трекер, документация: отладка, курс: как сделать сайт быстрым)
- Снижайте нагрузку через API и кэш, оптимизируйте JS. (курс: снижение нагрузки через API, курс: оптимизация JS)
- Для высоких нагрузок — репликация, кластер, шардирование. (документация, документация, курс: балансировка в кластере)
- Храните сессии правильно (hot/cold-режим, шифрованные cookie). (документация, курс: сессии и cookie)
Безопасность
- Фильтруйте и экранируйте весь пользовательский ввод — защита от XSS через санитайзер и экранирование вывода. (документация: XSS, документация: санитайзер)
- SQL-инъекции: только ORM/подготовленные запросы. (документация)
- CSRF/SSRF: проверка
check_bitrix_sessid()для форм и действий, ограничение исходящих запросов. (документация) - Проактивная защита и файрвол — включайте штатные механизмы, не изобретайте свои. (документация: проактивная защита, документация: файрвол)
- Права доступа — через штатную модульную систему прав, а не самодельные проверки. (документация)
- Безопасные cookie и сессии (HttpOnly, Secure, шифрование). (документация)
- Персональные данные: согласия, двухфакторная аутентификация для админки. (документация: согласие пользователя, документация: 2FA, курс: безопасная кастомизация)
Обновления, бэкапы, тестирование
- Регулярно устанавливайте обновления — это защита от уязвимостей; правильная кастомизация (пп. 4–5) делает обновления безболезненными. (курс, курс: обновление и бэкап)
- Резервные копии — не реже раза в день, с проверкой восстановления. (курс, документация: бэкап)
- Тестируйте доработки на копии перед переносом на боевой сайт. (курс: тестирование проектов)
- Следите за качеством в эксплуатации: логгер, монитор качества. (документация: логгер, документация: монитор качества)