Введение
В данной статье я хочу отразить ряд советов и подсказок по работе с 1С-Битрикс, а также оградить читателя от подводных камней, с которыми я сталкивался сам или сталкивалась команда.
Важно заметить, что разработка на 1С-Битрикс имеет свою специфику, которую в данной статье я не подвергаю критике.
Это всего лишь еще один инструмент для бизнеса, основанного на веб-разработке, и нужно попробовать использовать его на максимум.
Агенты в 1С-Битрикс
В 1С-Битрикс существует система внутреннего менеджера фоновых задач. Важно учесть, что по умолчанию задания совсем не фоновые, а выполнятся на хитах посетителей.
Обязательно следует установить выполнение фоновых заданий на cron
ровно так, как это указано в уроке по CMS.
Если же этого не будет сделано, “несчастливым” посетителям придется отправлять почту во время загрузки страницы.
Если настроена SMTP-авторизация при отправке писем, то страница будет отдавать 3-5 и более секунд.
Другое неочевидное условие, накладываемое механизмом агентов: задание должно выполниться за 6 минут.
Если ваше задание выполняет долгий парсинг или время выполнения может быть непредсказуемым, будьте готовы, что произойдет дубль задания, так как платформа Битрикс посчитает, что “предыдущая версия” агента зависла и не отработала.
Используйте очереди для долгих фоновых обработчиков, агенты Битрикс подойдут только для непродолжительной фоновой активности.
Битрикс и объемы данных
Как правило, типовой проект на начальном этапе выглядит так:
- виртуальный хостинг за 2000 руб. в месяц, хорошо настроенный под Битрикс
- каталог: 200 000 товаров, 300 свойств
- требуется интеграция с ERP-заказчика
- частота обновления данными - как можно чаще
- заказчик не готов на значительную кастомизацию платформы.
К сожалению, штатный интернет-магазин Битрикс будет работать медленно. Медленно - это 5-8 секунд на страницы без кеша.
Причины следующие:
- EAT-модель хранения данных в БД
- Большое количесва legacy-кода в ядре
- Неоптимальные запросы к БД
- Противоречивые требования заказчика.
Чтобы решить проблему, нужно:
- Проработать стратегию изменения данных: определить частоту, минимально-необходимую бизнесу заказчика и позволяющую снихить нагрузку на сайт
- Проработать механизмы кеширования, вероятно, избавиться от тегированного кеша на часто посещаемых страницах
- Кастомизировать платформу для возможности работы с in-memory хранилищем данных, например, sphinx, redis
- Использовать механизм прогрева кеша.
Штатно в Битрикс всего этого нет, удовлетворительную работу можно наблюдать только на малых объемах данных.
Composer и 1C-Битрикс
Автозагрузка в ядре Битрикс, к сожалению, выполнена по PSR-стандарту. Используйте возможности автозагрузки с помощью composer
.
В последних обновлениях composer
официально поддерживается платформой.
Если же у вас старая версия ядра, то рекомендую сделать так, чтобы в файле init.php
была только одна строчка
<?php
require /_путь до vendor_//autoload.php;
Не храните папку vendor доступной извне. Лучше выносить за DOCUMENT_ROOT
или закрывать через .htaccess
или location
.
DRY и 1С-Битрикс
Методология Битрикс предполагает, что логику получения и обработки данных нужно делать в компонентах. Шаблоны нужны для вывода информации.
Если вывод информации нужно скорректировать, нужно использовать специальный файл result_modifier.php
На практике же получается так: используется штатные компоненты с нестандартной версткой, для которой нужно дополучить много данных в resut_modifier.php
.
На этапе разработки все хорошо. Но затем сайт начинает жить своей жизнью и разработчиком приходится копировать шаблоны, чтобы изменить, например, вывод списка товаров с таблицы на карусель.
Код в result_modifier.php
дублируется и приходится поддерживать вдвое больше.
Выносите обработку данных компонентов в свои классы, сократите result_modifier.php
до строк:
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
\\App\\Component\\Bitrix\\CatalogSection::getInstance()->handleResult($arResult);
Карта сайта и 1С-Битрикс
Если вы включили автогенерацию сайта и у вас тормозит изменение элементов ИБ, то значит, придется перегенерировать изменения вручную, а автосоздание карты сайт отключить.
Причина в том, что в при включении данной опции любое изменение элемента ИБ влечет за собой фактическое изменение карты сайта с записью на жесткий диск.
На момент написания статьи стандартного механизма фоновой генерация карты сайта в платформе нет.
Поиск и 1С-Битрикс
Если заказчик хочет, чтобы на странице результатов поиска товаров был умный фильтр, а товары сортировались по релевантности - вам нужно писать свое решение. Работают связки: Битрикс + Sphinx, Битрикс + ElasticSearch. Штатного решения нет.
Для такой реализации:
- данные должны индексироваться поисковым движком (желательно фоном)
- компоненты обращаются к поисковому движку за данными
- запросы к поисковым движкам будут “сложные” с учетом нетривиальной логики построения фасет для умного фильтра
- это дорогое решение, так как тянет за собой много нюансов: настройка SEO, работа ЧПУ и так далее.
Cookie и 1С-Битрикс
Используйте запись в cookie одним способом на backend
и frontend
: или нативными средствами, или API Битрикс.
Не стоит писать на js через jquery-плагин, а в php через CApplication
, потому что в таком случае не будет контроля над префиксом у ключей cookie, а также путаница при работе с поддоменами.
Штатные функции:
- https://dev.1c-bitrix.ru/api_help/main/reference/cmain/set_cookie.php
- https://dev.1c-bitrix.ru/api_help/js_lib/kernel/utilits/bx.setcookie.php
Обновления и 1С-Битрикс
Будьте готовы, что обновление - это кропотливый и долгий процесс. Обязательно обновляйте платформу сперва на копии, а затем на боевом сайте. Обязательно подготовьте копию перед самым обновлением, чтобы была возможность переключиться на копию.
К сожалению, бывал в ситуациях, когда обновление “ломало” сайт и восстанавливать приходилось через тех. поддержку вендора. Или приготовьте красивую заглушку с информацией о технических работах на 6 часов. Как это сделать описано в уроке.
Веб-окружение и 1С-Битрикс
Платформа очень капризна к веб-окружению. Стоит отдать должное разработчикам, штатные инструменты помогают устранить много проблем. Очень важно, чтобы все показатели штатной системы проверки были пройдены. Постараюсь оградить вас от скрытых проблем.
Типичные ошибки:
- Параметр
mbstring.func_overload
очень часто отличается для разныхSAPI
. Обязательно проверьте настройку при работеphp
из командной строкиВ противном случае можно получить ошибки отправки почты и другие сложно-диагностируемые проблемы работы агентов.php -r 'phpinfo();' | grep mbstring
- Системный пользователь сайта и веб-сервера разный. Если так случилось, то вероятна ситуация, когда, например, фоном будет создан файл с кешем, а веб-сервер не сможет его сбросить, так как для ОС это будет недопустимо из-за ACL.
- Отсутствует мониторинг. Без мониторинга сайта вы никогда не узнайте, что там скоро закончится место и его не хватило на последнюю резервную копию.
- Бекап должен быть и должен быть хорошим, целостным, полным и проверяться на валидность по расписанию. Если всего этого нет, то это очень плохо.
Описанные выше проблемы частично можно решить посредством установки веб-окружения 1С-Битрикс. Состав и качество настройки поставляемого с ним ПО можно подвергнуть критике, но головной боли для непрофильных администраторов должно быть меньше.
Контроль версий и 1С-Битрикс
Сталкивался с несколькими идеями по организации разработки c VCS
и 1C-Битрикс.
- Папка
.git
не вDOCUMENT_ROOT
. Плюсы: безопасность. Минусы: репозиторий не переносится вместе с резервной копией. - Ядро Битрикс в контроле версий. Плюсы: полный контроль за репозиторием и подрядчиками. Минусы: объем репозитория возрастает, при обновлении Битрикс меняются почти все файлы, поэтому отследить что-то невозможно.
Поэтому считаю оптимальным держать в корне проекта файл .gitignore
. Пример файла и папке .git
, а также проследить, чтобы к данным файлам не было доступа извне.