ReCoder (recoder) wrote,
ReCoder
recoder

  • Mood:

Dojo Framework

Вялотекущие архитектурные изыскания вышли в стадию активного прототипирования клиентской части. Очень хотелось найти JS-фреймворк, одновременно предоставляющий достаточный уровень абстракции над DOM, единообразную поддержку разных событий, средства моделирования данных (чтобы не возиться с прикручиванием Backbone, Knockout и прочих), инструменты для разработки UI-компонент и обладающую уже готовым набором этих компонент. Искать пришлось довольно долго.

Довольно быстро с дистанции сошли SproutCore (который теперь Ember), Qooxdoo, dHTMLx, SmartClient, Rico. Туда же пошли монстры вроде AppCraft.

В финал вышли: jQuery UI, ExtJS, Dojo и YUI3. Отбросил YUI3, потому что где будет Yahoo даже через полгода - совсем непонятно, плюс даже третья версия показывает признаки старости. jQuery UI выглядел неплохо, но разработка его как целого тулкита у меня вызывает лёгкое недоумение (они там похоже простое дерево третий год пишут). ExtJS, особенно четвёртая его инкарнация, очень хорош, однако его лицензионные заморочки настораживают даже меня (а что скажут юристы?!). И остался Dojo Toolkit.

Пристальное изучение самого свежего Dojo 1.7 показало, что это офигенный фреймворк, незаслуженно обделённый вниманием в интернетах. Поначалу конечно подсознательно сравниваешь его с jQuery и огорчаешься от необходимости писать столько много буковок. Но когда понимаешь, что приобретаешь за такую небольшую цену - приходит настоящее счастье. Итак, что мы имеем в бонусах?

  1. Продуманную модульность с асинхронной загрузкой (AMD-compliant). Есть компактное микро-ядро, которое умеет грамотно подгружать всё остальное, разрешая зависимости на лету.
  2. Неплохой инструментарий для работы с DOM. Конечно всё не так изящно, как в jQuery, но привыкнуть можно. Можно делать запросы селекторами и скармливать результаты итераторам и прочим map'ам и reduce'ам. (Для фанатов - есть всякая продвинутая функциональщина.)
  3. Полная модель событий. На элементах поддерживаются как DOM-события, так и свои собственные. Плюс есть глобальный механизм pub/sub по именованным топикам.
  4. Есть средства моделирования данных (data stores) с набором готовых хранилищ поддерживающих JSON, CSV, OPML, YQL, RDF и др. Хранилища умеют интегрироваться с другими компонентами, вроде таблиц или графиков, обеспечивая живое обновление на лету.
  5. В Dojo имеется удобный механизм для создания независимых виджетов ("dijits") и в комплекте поставляются десятки уже готовых виджетов разной степени завершённости: средства layout'a, диалоговые окна, продвинутые формы, многофункциональные таблицы и деревья, всяческие менюшки, графики, карты и многое-многое другое.
  6. Графическая подсистема с поддержкой анимации. Помимо кросс-браузерной поддержки векторной графики, в Dojo есть и весьма обширная библиотека диаграммных компонент вполне на уровне лучших платных JS-библиотек. Те, кому вдруг не хватит встроенных средств визуализации, смогут легко дополнить библиотеку своими собственными модулями - это довольно несложно.
  7. Есть методология поддержки тем оформления - как для виджетов, так и для диаграмм, с возможностью подменять темы на лету.
  8. Заявлена поддержка мобильных интерфейсов - для клиентов на iOS, Android и Blackberry. Пока не тестировал, но хочется верить что поддержка достойная.

Есть в Dojo и ещё одна крайне любопытная фича - декларативный стиль создания страниц. Работает это так: в заголовке страницы указывается флаг для подключения dojo-парсера, а затем в теле страницы создаются теги которые на лету будут заменяться на виджеты согласно свойствам описанным в атрибутах тегов (как раз в HTML5 не так давно узаконили data attributes).

Надо заметить что во всей этой бочке мёда имеется и ложка говна дёгтя. Мне кажется, что проблемы проистекают из того что это проект, создаваемый программистами для программистов. Соответственно первая проблема - это непостоянство API. Вероятность того, что найденный в интернетах пример на Dojo заработает на классах 1.7 с первого раза - мягко говоря невысокая. Где-то просто поменялись аргументы, где-то классы переехали между namespaces, а где-то и просто нет обратной совместимости. Показательно: берём примеры с официального сайта из раздела tutorials, запускаем их и видим в JS-консольке предупреждения о deprecations. То есть как только выйдет обещаемая версия Dojo 2.0 - нас опять будут ждать весёлые времена. И сюда же примыкает вторая громадная проблема - отсутствие внятной документации. Вероятность обнаружить полную документацию по, скажем, аргументам конструктора класса из dojox.*, стремится к нулю. На официальном сайте иногда можно найти примеры использования классов, иногда - подробный tutorial, но как правило страница документации содержит стандартное "class Foo наследуется от FooBase, создаётся foo = new Foo и делает Foo". То есть пользоваться Dojo без тщательного изучение всех исходников - скорее всего не получится. Насколько это плохо - придётся решать каждому девелоперу самому. Лично я пока ещё в глубоких раздумьях.

Вообще, похоже что Dojo - проект с трудной судьбой, ведущий свою историю с лохматого 2004 года. Так что пишется он давно, в разработчиках в разное время засветились IBM, AOL, Sun и другие конторки помельче. Однако, похоже что пару раз в процессе развития им приходилось отказываться от совместимости назад, что не добавляло популярности. А в районе 2008 года их чуть было не запинал jQuery, но ребята нашли силы и средства дать отпор. И, хочется верить, продолжат движение вперёд. Дополнительную надежду даёт наличие в разработчиках нашего бородатого дядьки по имени Eugene Lazutkin. :)

Резюмируя, в общем Dojo мне понравился и, если не наткнусь на что-то совершенно фатальное, буду строить UI именно на нём. Если у кого будут вопросы по Dojo - приходите обсуждать на ХэшКод или на StackOverflow.

coding javascript

Tags: coding, javascript
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments