В онлайн-трансляции нашей конференции HolyJS мы подходили к стендам спонсоров и расспрашивали их о JavaScript-разработке. На стенде Solar Security Андрей gritsev Грицевич (руководитель разработки решения Solar Dozor) рассказал нам про используемый фреймворк Ext JS — и мы подумали, что его слова могут быть интересны не только зрителям трансляции, но и читателям Хабра, не работавшим с этим фреймворком. Поэтому расшифровали этот диалог и, немного отредактировав, публикуем здесь.

— Не все знают Solar Security, поэтому вступительный вопрос: чем занимается компания, и в каких продуктах вы используете JavaScript?

— Наша компания — это российский вендор-разработчик программного обеспечения и сервис-провайдер в сфере информационной безопасности. Из всего спектра наших продуктов для JavaScript-разработчиков, наверное, интересны два: IGA-платформа Solar inRights и DLP-система Solar Dozor.

— А чем именно они интересны с точки зрения JavaScript, что там внутри?

— Интерфейс этих продуктов построен на JS-фреймворке Ext JS. Наверное, молодое поколение сейчас немного скривилось, поскольку в сообществе есть представление, что этот фреймворк устарел. Но на самом деле это не так. Он очень активно развивается, и для сложного интерфейса, который нужен энтерпрайз-заказчикам, на мой взгляд, подходит идеально.

Его преимущество в том, что он предлагает большую компонентную базу, которая практически снимает необходимость в написании компонентов своими силами. Мы берём гриды и таблицы в уже готовом виде, а затем частично кастомизируем их. Это существенно ускоряет разработку.

То же самое касается очень удобной темизации — заказчики часто хотят кастомизировать визуальное решение интерфейса, и Ext JS позволяет быстро и без проблем модифицировать существующие продукты под их требования.

— Хочется подробностей: а есть, например, какие-то встроенные графики?

— Конечно. По-моему, несколько лет назад Sencha (владельцы кода Ext JS) купили библиотеку Raphaёl, и теперь графики в Ext JS — одни из самых навороченных в индустрии. Есть возможность генерить их и в Canvas, и в SVG; есть трёхмерные графики, есть бары, линейные графики, аппроксимация — то есть практически всё, что может потребоваться. Хотя наши дизайнеры умудряются придумать вещи, которых даже там нет. Но есть система классов. Вы наследуетесь, меняете те вещи, которые нужны именно вам: рендереры кривых и точек, цвета, градиенты, тултипы. Если вам и этого не хватает, можно присоединить D3.js.

— По поводу «устаревшего» Ext JS: а сколько времени вы его уже используете, и насколько сильно он изменился за это время?

— Используем уже 6-7 лет, примерно с 2010 года. Начинали с третьей версии Ext JS, сейчас уже шестая. Поменялось всё очень сильно, третья версия фактически была системой классов Java-подобного стиля, затем в четвёртой версии появилась модель MVC. Пятая и шестая версии — это уже полноценная MVVM и объединение фреймворков для мобильного приложения и для десктопных браузеров.
В последней версии появились двунаправленные биндинги, View-модели, нативная поддержка ECMAScript 6, своя система сборки, которая одной командой позволяет вам собрать приложение — все CSS, ресурсы, S CCS и так далее.

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

— Из того, что появилось за последнее время — было ли что-то
наиболее критичное для вас, после чего вы поняли, что вам становится удобнее
жить?


— Я бы назвал биндинги. В Ext JS каждый компонент является отдельным классом, отдельным файлом. И двунаправленные биндинги позволяют писать эти компоненты, как правило, в декларативном стиле. Не нужно писать функции-обработчики данных, вы просто создаёте связи в шаблонном виде — очень наглядно и очень коротко. Выстраивание связей между компонентами стало настолько удобным, что уже перешло из разряда программирования в разряд конструирования.

Вы просто рисуете в своей голове систему компонентов из связей, layouting. Все эти взаимосвязи занимают в коде очень мало места. И потом смотреть на этот код и привлекать других разработчиков к поддержке становится заметно легче. Если речь идёт о какой-то базовой функциональности, класс занимает буквально 15 строчек кода — и это уже полноценный компонент, например, таблица.

К нам на этой конференции подходили участники, имевшие опыт работы с Ext JS, и их оказалось не так мало — человек 20-30. Из них процентов 80% работали с Ext JS полноценно, то есть год-полтора, и они очень довольны этим фреймворком. Для своих задач, для построения энтерпрайз-систем, это очень крутая штука.


посмотреть в полном размере

— Насколько понимаем, вы делаете приложения для «крупного энтерпрайза». Вы уже упоминали кастомизацию, а у больших заказчиков обычно повышенные требования к ней. Как именно Ext JS помогает с этим справляться?

— Это очень хороший вопрос, я надеюсь, рано или поздно это станет темой отдельного доклада. У нас несколько примеров использования такого вида вещей. Например, у Solar inRights есть ядро, которое является совершенно полноценным, отдельно работающим продуктом. И есть крупный заказчик, для которого нужно не только кастомизировать цвета и логотипы, но и поменять функциональность, где-то добавить или убрать колонку, создать какое-то новое окошко, систему логина изменить.

В Ext JS есть такая система пакетов — это связка кода и класса, CSS-ресурсов, такое полноценное мини-приложение, и есть наследование этих пакетов. Вы просто берёте базовый пакет ядра, берёте специальное приложение, отдельный пакет для этого нового продукта, наследуете базу и локально, точечно меняете функции, цвета — всё, что хотите. Поскольку Solar inRights разбит на много маленьких компонентов, маленьких классов, можно менять только те из них, которые нужны заказчику. Во время сборки Sencha Cmd (специальная утилита командной строки, которая всё это дело собирает) проходит эти зависимости и собирает нужное для конкретного заказчика решение.

Плюсы этой модели очевидны: можно развивать ядро и автоматически обновлять его у заказчика, не теряя кастомизации.

— А что, если нужно не «сделать одному приложению несколько версий для разных клиентов», а «сделать нескольким приложениям одни и те же особенности»?

— Есть отдельный механизм тем — это такой специальный пакет, в котором есть S CSS, переменные, ресурсы. Вы наследуетесь от базовой темы, меняете базовые переменные (их там штук 10-15) и получаете практически совсем другую тему. Естественно, вы потом это всё усложняете, меняете отступы и бэкграунды, прозрачность и так далее — всё зависит от вашей фантазии. И эту тему можно присоединять к любому Ext-приложению, что очень удобно.

Был один случай: наша основная тема — тёмная, а заказчик захотел светлую, и мы за две недели, меняя фон, бэкграунды и цвета кнопок, сделали светлую тему, заказчик остался доволен.

— Как вообще происходит продакшн приложения, которое написано на Ext JS? У вас это начинается с каких-то дизайн-макетов?

— Нашему DLP-продукту Solar Dozor в целом лет 17, и его ранние версии тоже были написаны на Ext JS, но на более старом. Тогда в разработке интерфейса этого продукта не участвовал ни один дизайнер и ни один аналитик. Я, может, крамольную вещь говорю, но это очень плохо. У нас, разработчиков, всё-таки мозг немного по-другому повёрнут, мы думаем не как обычные люди. Нам кажется очевидным, что тут нужно сделать чекбокс, а тут — кнопку. Но, к несчастью или к счастью, пользователи думают по-другому, и поэтому обязательно нужно нанимать в команду дизайнеров, юзабилити-специалистов.

Поэтому, когда пришло осознание, что даже для энтерпрайзного продукта нужен хороший и продуманный интерфейс, была набрана команда очень серьёзных аналитиков, команда дизайнеров, и они вместе с разработчиками где-то год создавали продукт заново, рисовали варианты дизайна, продумывали юзабилити.
Сейчас мы приезжаем на конференции в арабские страны, показываем интерфейс нашего продукта, и люди в восхищении говорят «как такое может быть», спрашивают, приехали ли мы из Америки, из Калифорнии, и на чём мы это всё писали. Даже жена, когда я работаю дома, проходя мимо, невольно останавливается, смотрит на интерфейс и говорит: «Какие вы молодцы».

А процесс такой: у нас есть бизнес-требования, наши системные аналитики их
анализируют и общаются с дизайнером, тот рисует макеты, используя сформированный Style Guide, а потом уже мы, разработчики, просто берём
это в работу и реализуем. У нас есть обратная связь от дизайнера — он
проверяет, что мы сделали. Конечно, не всегда бывает с первого раза всё хорошо,
но это стандартный рабочий процесс. Со временем мы научились быстро делать то,
чего хочет дизайнер, т.е. так, чтобы в продукте всё было удобно и понятно.

— Спасибо, Андрей!

— Вам спасибо! Мы начнём менять предубеждения разработчиков о том, что Ext JS — устаревший фреймворк. Он современный и очень даже крутой!

Комментарии (47)


  1. maxzh83
    15.01.2018 17:34

    Для полноты картины не хватает только ценника и правил лицензирования )


    1. bjornd
      15.01.2018 17:36

      А еще отчета о результатах поисков разработчиков в команду, даже просто готовых писать на нем, не говоря про наличие опыта именно с ExtJS. Источник: 4 года в проекте на ExtJS.


      1. wispoz
        15.01.2018 18:00

        Опыт 3 года в проекте, писать на нем довольно приятно, особенно с 6 версии. Для нашего проекта очень подкупают такие компоненты как Bryntum.Gantt, очень удобный компонент.
        Один большой косяк в нем раздражает, если в каком то компоненте появилась ошибка, падает все приложение.


      1. RomanPokrovskij
        15.01.2018 18:53

        Интерес к extJs не нулевой. Программисты обычно интересуются на чем сделана та или иная понравившаяся им веб аппликация, и с extJs таким образом встречаются. У моего synology NAS веб-морда на extJs — просто дух захватывает. Если делать виртуальный веб десктоп — то extJs наверное без альтренатив. Кстати, почему-то об этом не упомянуто.


        1. gritsev
          15.01.2018 22:59
          +1

          Есть мнение, что “виртуальный веб-десктоп” (если мы, конечно, говорим об одном и том же) не очень актуальная штука. По-крайней, мере наши ux-специалисты его очень не любят и считают, что все можно сделать в более привычном всем web-стиле.


          1. RomanPokrovskij
            16.01.2018 09:55

            Если цель передать пользователю мессидж «наш NAS/router/утюг самый мощный», то метафора «настоящего компьютера внутри с настоящим десктопом» — попадает точно в цель.


      1. gritsev
        15.01.2018 22:58

        За последние полгода мы взяли 4 разработчиков с опытом от 3 лет и остановились только потому, что пока нам хватило :) При этом мы еще и выбирали. На конференции HolyJs к нам подошли около 20 “практикующих” ExtJs разработчика. Думаю, в ближайшее время с некоторыми из них мы будем общаться.


    1. gritsev
      15.01.2018 18:50

      На всякий случай, мы не продаем ExtJs :)
      Если по существу, то у них есть GPL версия, хотя, конечно, не сама свежая. Плюс, надо понимать, что этот фреймворк предназначен для Enterprise-решений и, с этой точки зрения, его ценник вполне гуманный


      1. maxzh83
        15.01.2018 21:32
        +1

        надо понимать, что этот фреймворк предназначен для Enterprise-решений

        Вот и предлагаю сразу написать ценник, чтобы случайные люди сразу понимали с чем имеют дело.


  1. evnuh
    15.01.2018 18:00
    +1

    В теории:

    Есть отдельный механизм тем — это такой специальный пакет, в котором есть S CSS, переменные, ресурсы. Вы наследуетесь от базовой темы, меняете базовые переменные (их там штук 10-15) и получаете практически совсем другую тему.

    На деле:
    Был один случай: наша основная тема — тёмная, а заказчик захотел светлую, и мы за две недели, меняя фон, бэкграунды и цвета кнопок, сделали светлую тему


    Надеюсь, всё не так плачевно, просто формулировка такая?) А то ведь две недели нескольких человек на «поменять тему» – это много.


    1. dopusteam
      15.01.2018 18:14

      Возможно, сюда включено общение с заказчиком: поменяли — показали — поменяли…


    1. wispoz
      15.01.2018 18:15

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


    1. gritsev
      15.01.2018 22:59

      У нас достаточно сложный продукт с кучей “страниц”, графиков, взаимосвязей и тд. Если честно, только дизайнер потратил около месяца чтобы отрисовать базовые вещи и согласовать их со всеми стейхолдерами. Так что две недели с тестированием и вылавливанием всех мелочей — это очень быстро.


    1. wispoz
      15.01.2018 23:06

      Больше интересует интеграция сторонних компонентов из мира Javascript


      1. dos
        17.01.2018 17:08

        Нет ничего сложного в этом. Мы таких монстров, как D3 и Highcharts интегрировали в Ext JS.


        1. wispoz
          17.01.2018 17:10

          Это и я умею :) Хотелось от разработчиков что то услышать.


    1. yokotoka
      16.01.2018 10:00

      Смотря что означает «поменять тему». Если сменить цвета — достаточно и SCSS.
      У меня был недавно случай, когда заказчик захотел полностью нестандартный вид, отрисованный дизайнером с любовью к шрифтам, типографике, большим пустым пространствам и вообще красивее, чем стандартная тема. И со стандартной темой почти ничего общего этот вид не имел. Вот там пришлось повозиться. Но результат того стоил.

      ExtJS очень хорош там, где нужны сложные табличные виды и в целом приложение напоминает скорее 1С, чем сайт (обычно это всякий энтерпрайз) и на любых других фреймворках просто задолбаешься делать все эти сложные гриды (не говоря о поддержке). Гриды там лучшие из всех, что видел. А для типичного веба я его крайне не рекомендовал бы — есть инструменты полегче вроде тех же Vue, Angular, React.


  1. justboris
    15.01.2018 20:14
    +1

    Столько воды в статье налили, а кода так и не показали.


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


    1. wispoz
      15.01.2018 21:41

      А какой вы код хотите увидеть? У sencha довольно обширные примеры, если конкретику скиньте пожелания.


      1. justboris
        15.01.2018 22:17

        Код, с которым станет понятно, чем Ext выгодно отличается от любой библиотеки из этого списка: https://habrahabr.ru/company/ruvds/blog/346090/


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


        1. wispoz
          16.01.2018 01:04

          Накидал маленький примерчик:
          fiddle.sencha.com/#view/editor&fiddle/2bup


          1. justboris
            16.01.2018 01:14

            У меня панель Preview показывает белый экран: https://habrastorage.org/webt/q9/vr/tl/q9vrtlar0-52pes0g6-ucfw5_bg.png


            Если развернуть панель, то появится страница с табличкой, занимающей четверть экрана: https://habrastorage.org/webt/ov/si/qd/ovsiqdobeo0shw8pvxv3u41ha-y.png


            Кажется, вы только что показали пример, почему НЕ надо выбирать ExtJS


            1. Evgenyx82
              16.01.2018 12:56

              Есть опыт участия в проектах на ExtJs 3-4 (>1года) — ну да, набор с выбором, от этого много проблем… кастомизация нулевая, читать упоротый вложенный по сто раз css, чтобы в колонку влезало все кол-во символов… если эта колонка editable, автоматом кастует \n\r, в обычный текст… открыл колонку на edit, ввел мультилайн текст, accept. Видим все одну строку. И так буквально на каждом шагу… После первого знакомства с ReactJs, стало понятно, это именно тот инструмент, который мне нужен… никакой vue, angular с их ng, binding… доп.атрибутами в разметке — полный бред… только реакт, только хардкор)))


    1. mrbig66
      16.01.2018 12:56

      Для просмотра кода есть ресурс с поиском
      Пример на fiddle.sencha.com


      1. justboris
        16.01.2018 13:40

        Аналогично комментатору выше, ваш пример показывает мне серый экран:
        https://habrastorage.org/webt/us/cc/zt/usccztgxspoohthgj8drpwnkrp0.png


        Браузер Хром, ошибок в консоли нет.


        1. wispoz
          16.01.2018 14:01

          А кнопку Add понажимать?


          1. justboris
            16.01.2018 14:03

            Ага, то есть это была часть демки и не редактора...


            Что в общем-то подтверждает тезис, что юзабильностью интерфейсы на Ext тоже не отличаются


            1. wispoz
              16.01.2018 14:11

              Нет, просто так сверстали данную демку. Вообщем из спора удаляюсь, он 'ниочем'. Спасибо, до свидания!


  1. fzn7
    15.01.2018 21:40

    Костяк Sencha это вроде те парни, которые в свое время пилили для Adobe Flex. Они знают как должен выглядеть идеальный ui фреймворк.


    1. wispoz
      15.01.2018 21:46

      Только автор забыл упомянуть что в конце года Sench'у купила некая фирма и основой костяк команды ушёл.


      1. coh
        16.01.2018 15:19

        Судя по отзывам типа «CEO sold us out, we're all fired» на glassdoor, вы еще слишком мягко написали, что костяк ушел.


        1. wispoz
          16.01.2018 15:21

          Я всей кухни не знаю, рассказал то что знал.


  1. kimisa
    15.01.2018 21:47

    Работала немного с ним в MODX, но там он идет адаптированным.


  1. NoRegrets
    16.01.2018 00:22

    Сталкивался с ExtJS как пользователь, глянул на семплы еще раз и возник вот такой вопрос. Насколько правильно перекладывать расчет лейаута на JS, полностью игнорируя CSS? Размеры всех элементов рассчитываются фреймворком и задаются в абсолютных значениях при каждом изменении размера окна. Почему бы не дать это сделать браузеру?
    Особенно доставляют гриды, с модельными данными выглядят приятно, а с реальными начинаются проблемы. И все благодаря фиксированной, прибитой гвоздями ширине столбца. Например таблица, скажем, 3 столбца, с шириной 60/20/20, первый столбец почти пустой, во втором — цена. И вот эта цена не вмещается и получается «100...». Выглядит это как привет из девяностых.


    1. wispoz
      16.01.2018 01:16

      fiddle.sencha.com/#view/editor&fiddle/2bup — все нормально работает если ширину задавать через flex.


      1. NoRegrets
        16.01.2018 08:39

        В вашем же примере, данные «test1,test2,test3» выглядят замечательно, но попробуйте засунуть в name строку в 150 символов и столько же в description. А теперь представьте, что есть у вас грид в котором часть полей отображаются «вот та..» и разобраться что именно там за строки — тот еще гемор. Я видел таблицы, в которых было два десятка столбцов, некоторые из которых отображали только первую букву «а..». Я говорю о том, что лучше видеть данные, чем иметь таблицу шириной точно в 932 пикселя.


        1. wispoz
          16.01.2018 09:38

          fiddle.sencha.com/#view/editor&fiddle/2bup
          Решается все CSS. Для своих задач ExtJS вполне нормален.


    1. Swat2k
      16.01.2018 18:20

      Для этого в ExtJS есть Modern Toolkit, именно там лейауты считает браузер.


  1. xakepmega
    16.01.2018 04:37

    Хотелось бы увидеть сравнение с react/vue/angular на каких-то конкретных ваших кейсах.


    1. wispoz
      16.01.2018 10:11

      Тут скорее надо сравнивать angular 5 + adgrid с ExtJS.


    1. gritsev
      16.01.2018 17:59

      К сожалению, у нас такого сравнения нет. В то время, когда мы начали заниматься текущей версии Solar Dozor, ничего из react/vue/angular еще не было – по-крайней мере, в промышленном качестве.


  1. moooV
    16.01.2018 17:11
    +1

    Лет 5 назад имел дело по работе с ехтжс4, это адище было просто.
    Настолько кривейшей и труднопонятной либы найти было трудно — чего только стоило то, что заставить это работать в связке с jQuery было нереально трудно.


    1. wispoz
      16.01.2018 17:32

      Стесняюсь спросить, а зачем его заставлять работать с jQuery? Там какой то плагин был особенный?


  1. impwx
    16.01.2018 18:02

    Поддерживается ли разработка на Typescript / Flow? Если да, в каком виде? Для фреймворка, который позиционируется для enterprise-сегмента, это особенно важно.


    1. wispoz
      16.01.2018 18:06

      Насколько я знаю официальных TypeScript биндингов нету. Если интересно то можно почитать тут: www.sencha.com/forum/showthread.php?244718-TypeScript


  1. muhaa
    16.01.2018 18:18
    +1

    Как-то пришлось написать корпоративное приложение на angular (самом первом) + TypeScript, а через пару лет другое на ExtJS 6. Вообще, я не веб-программист и изначально понятия не имел ни о первом ни о втором фреймворках. Мои впечатления: если для angular есть полная библиотека готовых UI компонентов, то ну его этот ExtJS. Изучая angular изучаешь концепции, которые в него вложены и учишься не наступать на ряд заложенных базовых граблей. По мере понимания концепций работа идет все веселее. Изучая ExtJS изучаешь множество сложных фишек для решения множества конкретных проблем и учишься не наступать на множество граблей, заложенных в каждом решении. Это очень утомляет. Особенно, когда осознаешь, что пихаешь в голову информацию и навыки, которые не в тренде и больше нигде не пригодятся.


  1. YemSalat
    16.01.2018 20:34
    +1

    Если вам нужно создать новое приложение, вы можете за минуту-две сгенерить его костяк

    Create React app, Vue cli, Angular cli? Не, не слышали…

    Есть отдельный механизм тем — это такой специальный пакет, в котором есть S CSS, переменные, ресурсы. Вы наследуетесь от базовой темы, меняете базовые переменные (их там штук 10-15) и получаете практически совсем другую тему.

    По-моему у любого набора компонентов для всех современных фрэймворков есть подобное.

    Был один случай: наша основная тема — тёмная, а заказчик захотел светлую, и мы за две недели, меняя фон, бэкграунды и цвета кнопок, сделали светлую тему

    Целые ДВЕ НЕДЕЛИ убить на изменение темы со светлой на темную (т.е. по сути только цвета меняем) — это на мой взгляд провал, а не достижение…

    От статьи складывается впечатление что автор провел последние лет 6-7 в полной изоляции от мира фронтэнд разработки.

    Мне приходилось поддерживать пару приложений на ExtJS, по сравнению с современными фрэймворками — это разрыв мозга.