Битрикс BX. Все за и против.

Вкратце о библиотеке

1С-Битрикс разработали для платформы библиотеку под названием BX, которая примерно на 80% повторяет всеми любимый jQuery с рядом отличий, среди которых как достоинства, так и недостатки. До определенного момента разработчики под битрикс мало смотрели в сторону библиотеки и часто решали возможные вопросы с помощью jQuery, но появился order_ajax.js который перевернул всё.

В апреле прошлого года Орландо Виласека представил новый шаблон оформления заказа в 7500+ строк кода на BX, что вызвало невероятный объем хайпа и гнев разработчиков. Шаблон оказался сложным, трудно кастомизируемым и не понятным. Пришлось изучать.

Наша компания уже давно смотрела в сторону BX и по другой причине – содержать решения на библиотеке jQuery по программе технической поддержки выходило накладно. Часто проблема возникала на фоне конфликта разных версий библиотеки или плагинов. С тех пор было решено писать на BX.

Библиотеки и плагины

Есть у компании клиент, сайт которого работал на тиражном решении, в котором было 4 библиотеки (BX, jQuery, Mootools, Prototype) и 12 плагинов – для мелочей вида слайдеров, модальных окон или других свистулек. Естественно всё это весело конфликтовало и замедляло загрузку проекта. Тогда решено было переписать весь функционал на jQuery, сегодня это было бы на BX.

Сегодня разработка любого нового проекта в МИТ ведется на BX по следующим причинам:

  • Простота поддержки кода (ну по крайней мере для нас :) )
  • Отсутствие конфликта со сторонними модулями на основе других библиотек
  • Повторное использование кода в рамках проекта
BX.namespace(‘BX.MIT.Main’);
(function() {
	BX.MIT.Main = {
		Init: function() {},
		SomeFunc: function() {},
		…
		OtherFunc: function() {}
}
})();

С помощью такого метода контролируются сквозные активити сайта, что дает возможность тонко управлять проектом или предоставлять пользователю удобные инструменты.

Достоинства

Главным плюсом использования библиотеки в том, что она уже присутствует в проекте.

Если сравнить с jQuery который обновляется практически каждую неделю, а разные версии могут отличаться. Битрикс же до сих пор поддерживает 1.8.3 и 2.*, полное отсутствие 3.2.*, и уж точно не скоро появится маячащий на горизонте 4.

Битрикс избрал простой и стабильный путь – библиотека в первую очередь обеспечивает работу внутренних потребностей платформы, а уже потом потребности разработчиков под нее. Обновление библиотеки не вредит старому коду (бывают конечно моменты), так как существует обратная совместимость.

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

Очень крутым плюсом на мой взгляд является надстройка с утилитами в библиотеке, которые позволяют повторить ряд функций PHP - https://dev.1c-bitrix.ru/api_help/js_lib/kernel/utilits/bx_util.php. Значительно упрощает разработку.

Недостатки

А тут пойдут примеры. BX избыточен. На форуме много пишется о сложности отбора элементов по различным видам селекторов, если в jQuery это можно сделать так:

$(‘.class’);
$(‘#id’);
$(‘tag’);
…
$(‘#id’).find();

То в BX получаем элементы прямым обращением только по идентификатору (что на мой взгляд правильно, потому что поиск элемента по классу или любому другому селектору по всему документу дурной тон). Чтобы получить по селектору требуется родитель, от которого будем совершать поиск, а сам поиск будем совершать с помощью нативных методов:

document.querySelector(‘.class’);
BX(‘id’).querySelectorAll(‘tag’);

Другим недостатком для библиотеки является реализация анимации – слишком сложная и для новичка вызывает головную боль. Например на BX:

var banner = BX("my-banner");
var easing = new BX.easing({
    duration : 500,
    start : { height : 0, opacity : 0 },
    finish : { height : 100, opacity: 100 },
    transition : BX.easing.transitions.quart,
    step : function(state){
        banner.style.height = state.height + "px";
        banner.style.opacity = state.opacity/100;
    },
    complete : function() {
        banner.style.display = "none";
    }
});
easing.animate();

Когда на том же jQuery такое можно реализовать гораздо проще:

$(“#my-banner”).animate(
	{
		height: 100,
		opacity: 1
	}, 
	500, 
	‘quart’
	function() { 
		$(“#my-banner”).css(‘display’, ‘none’); 
	}
);

К счастью, сегодня CSS берет подобную анимацию на себя, что сводит JS к присвоению или удалению CSS-классов.

Документация

Большой минус, который Роберт Басыров пытается устранить, но все же недостаточно быстро. Если на сайте Битрикса и есть документация, то покрывает менее 50% возможностей библиотеки.

Опытному разработчику не составляет особого труда посмотреть в исходник и найти необходимый для него метод или утилиту. Для тех же, кто не знает куда смотреть и как это все читать отсутствие документации большой шанс разочароваться в весьма замечательной библиотеке.

Использовать? Знать?

Тут каждый разработчик выбирает сам для себя. Знать библиотеку надо, в противном случае кастомизация большинства штатных шаблонов компонентов битрикса будет вызывать боль, ошибки и недовольство клиента. Либо писать свое, тогда в чем смысл использования битрикса, если не пользуется основной функционал платформы?

Арт-Директор mit
Александр Павлов

Уволен с ноября 2018

Дата: 20.06.2017

Поделитесь статьей со своими друзьями в социальных сетях.


Назад к списку статей