Закрыть
Вход на сайт
Регистрация
Вы успешно зарегистрировались!

Перейти к обучению
Регистрация
Войти на сайт

Плевок в лицо 1C-Bitrix

27 July 2016
1957
Много слов было сказано за всю историю сущестования 1C-Bitrix в его сторону. При чем, как плохих, так и хороших. И вот, я тоже решил излить свою душу в...

Много слов было сказано за всю историю сущестования 1C-Bitrix в его сторону. При чем, как плохих, так и хороших. И вот, я тоже решил излить свою душу в отношении этой грандиозной админки. К сожалению, слова будут не хвалить ее.

Начну с небольшой предыстории. 

Я учился делать сайты на 1C-Bitrix. На этой админке я понимал что такое CMS, что такое фреймворк, постигал php и оттачивал навыки верстки. И так как я не знал больше ничего другого, то искринне считал, что это идеальная машина для создания сайтов! Ничего лучше нету и не будет! Даже когда мы с другом писали сайт на Yii, я до последнего защищал Bitrix и умолял подключить его в проект. Потом я неплохо познал этот продукт, сделал несколько интернет-магазинов на нем и все было хорошо, но год назад я узнал про Ruby и Ruby on Rails. Этот язык захватил меня своей гибкостью, лакончиностью, красотой и я понял, что это мое! День и ночь я изучал рельсы, создавал приложения, тестировал, писал код и мне нравилось. Казалось, что я достиг дзена в кодинге, но нет... Тут пришел заказ на 1C-Bitrix и я решил за него взяться по старой памяти. Почему на 1C-Bitrix? Потому что главное условие выполнения заказа было установить на 1C-Bitrix. Ну и черт с ним. 

В общем-то говоря, я 10 раз пожалел, что взялся за этот заказ, точнее за то, что взялся делать его на битриксе. В сравнении с ruby on rails, ставить сайт на битрикс - это первый круг ада. Второй и дальнейшие круги - это joomla, modx, wordpress и так далее. 

Теперь расскажу почему битрикс так ужасен. Я выделю свои наблюдения и то, что я заметил. На самом деле минусов гораздо больше!!!

1. Самое главное - это использование фреймворка. Пример:
Как я буду выводить товары в битриксе: 

    <?
    $arFilter=array( 
        'IBLOCK_ID' => 1,  
    );
    $rsItems = CIBlockElement::GetList(array(),$arFilter);
    if ($arItem = $rsItems->GetNext())
    {?>
         <!-- Шаблон товара -->
    <?}?> 

И это самый минимальный вид, если надо задать больше условий, то массив $arFilter увеличивается в 10 раз, если есть пользовательские свойства, то их надо указать в еще одном массиве. Многие скажут: "В битриксе есть компоненты! Выводи компонентом!" 

Окей! Давайте выведем компонентом!

<?$APPLICATION->IncludeComponent(
    "bitrix:catalog.section.list",
    "section_catalog",
    Array( 
        "ADD_SECTIONS_CHAIN" => "Y",
        "CACHE_GROUPS" => "Y",
        "CACHE_TIME" => "36000000",
        "CACHE_TYPE" => "A",     
        "COUNT_ELEMENTS" => "N",
        "IBLOCK_ID" => "1", 
        "IBLOCK_TYPE" => "Content",
        "SECTION_CODE" => $_REQUEST["CODE"],
        "SECTION_FIELDS" => array("", ""),
        "SECTION_ID" => $_REQUEST["SECTION_ID"],
        "SECTION_URL" => "",
        "SECTION_USER_FIELDS" => array(
            'UF_AFTER',
            'UF_VENDOR',
            'UF_TITLE',
            'UF_KEYWORDS',
            'UF_DESCRIPTION',
            'UF_PERFOMANCE_MIN',
            'UF_PERFOMANCE_MAX',
            'UF_PRESSURE_MIN',
            'UF_PRESSURE_MAX',
            'UF_POWER_MIN',
            'UF_POWER_MAX',
            'UF_GRAVITY_MIN',
            'UF_GRAVITY_MAX', 
            'UF_VOLTAGE_MIN',
            'UF_VOLTAGE_MAX',
            'UF_PROPUSK_MIN',
            'UF_PROPUSK_MAX',
            'UF_RECEIVER_MIN',
            'UF_RECEIVER_MAX',
            'UF_ALT',
            'UF_DIMENSIONS_MIN',
            'UF_DIMENSIONS_MAX',
            'UF_PERFOMANCE_SHOW',
            'UF_PRESSURE_SHOW',
            'UF_POWER_SHOW',
            'UF_GRAVITY_SHOW',
            'UF_VOLTAGE_SHOW',
            'UF_ENGINE_SHOW',
            'UF_DIMENSIONS_SHOW',
            'UF_RECEIVER_SHOW',
            'UF_PRIM',
            'UF_DEHUMIDIFIER_SHOW',
        ),
        "SHOW_PARENT_NAME" => "Y",
        "TOP_DEPTH" => "1",
        "VIEW_MODE" => "LINE"
    )
);?> 

 

Хочу заметить, ситуация проще не стала. Куча не понятных параметров, которые все не запомнишь. Тут могут придти на помощь умные люди и сказать, что параметры можно задать через "Режим правки". И, в прицнипе, они будут правы, но если бы не одно но...в определенный момент, компонент выдает вот такое сообщение: 

И с этой проблемой можно бороться, но только если немного пошуметь бубном!
У вызова компонента даже есть один плюс - кеширование. 

Но есть один момент, который я не понимаю. Когда мы выводим разделы, то когда страница не прокешировалась, то происходит следующее: 

658 запросов к базе данных! 658!!!!!!!! Вы можете себе представить? Потом мы обновляем страницу, все данные прокешировались и вуаля: 

 

6 запросов и все встало по своим местам. От куда беруться 658 запросов? Мне не понятно. 

Такс, такс, такс...а давайте посмотрим, как ruby on rails будет выводить товары: 

Product.all.each do |item|
    #шаблон товара
end

3 строки!!!! Друзья, 3 строки!!! Я повторюсь, 3 строки кода, чтобы выполнить то же самое действие, что и в битриксе. Кто-то сможет сослаться, что это ruby, в php так нельзя (дурацкая отмазка, но вдруг такие найдуться), то скажу, что есть фреймворк Yii, в котором запрос происходит примерно так же как и в ruby. P.S. но чуть-чуть сложнее. 

2. В тот самый момент, когда вы доделали сайт на локалке и решили выложить сайт на сервер, вы обременяете себя синхронизацией локальной копии и серверной. 

Как это делается в битриксе:

Мы можем пойти двумя путями, чтобы залить сайт на сервер. Либо восстановить копию на сервер, либо сначала установить битрикс и залить бекап. Давайте разберем второй способ, чтобы разобраться в некоторых мелочах. 

1) Вам надо зайти на сервер, закинуть файл bitrixsetup.php, запустить его, начнется установка продукта на сервер и тут вы наткнетесь на один удивительный вопрос. Какую кодировку использовать? windows-1251 или utf-8. Плохая новость в том, что битрикс по стандарту использует win-1251 и чтобы поставить в utf-8, что на мой взгял логичнее, необходимо в параметрах php задать два параметра: mbstring.func_overload=2 и mbstring.internal_encoding=utf-8. Эти параметры иногда добавляют масштабного гемора к установке. А если у вас хостинг, то вы не можете это сделать самостоятельно и придется писать в тех. поддержку и просить установить их, а на это еще пол дня может уйти. 

2) Надо сделать на локалке бекапы сайта. В принципе ничего сложного. 

3) Потом мы заливаем бекапы на сервер. РУКАМИ! или выбираем файлы при установке, но в любом случае пока что несколько сотен мегабайт зальются, надо подождать. 

4) Потом мы восстанавливаем архив, разворачиваем его и сайт на сервере. НО! Теперь чтобы делать изменения, нужно заходить на сервер и редактировать сайты на сервере!!! Или делать на локалке, потом делать архив, загружать его, разворачивать и только тогда увидите изменения на сервере. Я сделал чуть проще, у меня brackets синхронизируется с фалами на сервере через фтп и все файлы, которые я меняю на локалке, сразу меняются на сервере. Но тогда если вдруг произошел какой-то баг, то он будет и на локалке и на сервере. Не очень красиво, не правда ли?

При чем, все эти действия надо повторять с каждым новым проектом!

Как происходит тот же самый процесс на ruby on rails. 

1) Устанавливаем гем capistrano. 

2) Указываем в настройках пути куда загружать файлы и доступ к базе данных. 

3) Создаем git. Я лично использую BitBucket. 

4) Запускаем в терминале команду: cap production deploy. И все действия, которые я описывал про битрикс делаются автоматически. Мы просто наблюдем за результатом. 

На практике установка битрикса занимает от 10 минут до часа (в зависимости от хостинга и геморности его настройки). 
Проект на ruby on rails разворачивается за 10 минут и точка. 

При чем у меня есть копия на локалке и копия на сервере. Пока что я делаю правки на локальной версии, рабочая версия работает на сервере и ничего с ней не происходит. Сделал ошибку на локалке, ничего страшного, исправим, есть время! Ведь рабочая работает и ей ничего грозит. Потом когда на локалке исправили все баги, запускаем cap production deploy и все наши изменения АВТОМАТИЧЕСКИ уходит на сервер! 

В общем почему Битрикс не сделали что-то удобное для разработчиков в этом плане не понятно...

3. Так же в процессе разработки я столкнулся с очень интерсной проблемой. В битриксе есть разделы, образно говоря папочки. У каждого раздела есть свойство DESCRIPTION - описание раздела. Тип этого свойства - html. Ну то есть я могу использовать форматирование текста. Мне для раздела понадобилось еще одно поле с типом html. Но я не смог его создать, потому что битрикс этого не предусмотрел! Я могу добавить только свойство с типом "Строка". А строка - это одна строка текста. Я не смогу ее форматировать. Можете себе представить огромный текст, который написан в одну строку и его надо редактировать? Не удобно, не правда ли? Для решения этой проблемы пришлось устанавливать доп. модуль, который позволяет добавлять к разделам поле с типом html. 

4. Но проблемы на этом не окончились. Потом мне надо было написать поиск. Задача простая: найти слово в тексте. Просто найти одно слово в тексте. Так оказалось, что в битриксе не работает фильтр по полю DESCRIPTION  у разделов!!! Мне пришолсь создавать новое html-поле, в которое я перекопировал весь текст, а это 500 страниц, и тогда все заработало! 

Вывод:
По итогу, оказалось, чтобы создать одинаковое действие на битриксе, необходимо затрать раза в 4-5 больше, чем я делал то же самое на ruby on rails. 

Это всего лишь 4 самые главные проблемы, которые меня зацепили и не понравились. На самом деле багов еще больше и все в одной статье не описать. 

Почему все так плачевно? На мой взгляд, потому что изначально сделали огромную кучу навоза и теперь уже поздно что-то переделывать. Битрикс - это тонны кода и готовых наработок, которые хоть как-то работают. Чтобы сделать нормально, надо написать все с нуля! А это еще несколько лет работы, которые почему-то не хотят потратить.

Хотя зачем? Сейчас это самый популярный продукт на рынке, его покупают и он приносит деньги. Зачем тогда что-то менять, если и так все хорошо. И на рынке на самом деле нет ничего лучше, чем Битрикс. А все, что лучше, надо изучать, понимать и разбираться, на что люди не хотят тратить свое время и усилия. 

Мне немного обидно, что Битрикс портит столько программистов, ломают им мышление и развивают любовь к не правильным продуктам. 

Друзья! Если вы еще не попали в оковы php и 1C-Bitrix, взгляните в сторону ruby или других нормальных языков программирования и фреймворков! 

Удачи в кодинге!