Главная > AJAX, Open Source, web2.0, веб-обзоры > Dojo Toolkit 1.2 — обзор релиза самой мощной Ajax библиотеки в мире

Dojo Toolkit 1.2 — обзор релиза самой мощной Ajax библиотеки в мире

13 октября 2008

Приветствуем наших читателей! Этим обзором мы открываем второй год нашего блога и надеемся, что и далее мы будем радовать вас описаниями новых, незаслуженно забытых или малоизвестных проектов. Оставайтесь с нами! Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное.

И так, Dojo Toolkit - это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт - Dojo 1.2.

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

Dojo core.

Обновлён модуль работы с событиями клавиатуры, теперь мы можем перехватывать нажатия любых клавиш, даже специальных и обрабатывать их в своём приложении, также исправлены некоторые баги.  Модуль детектирования платформы потерпел изменения - теперь нужно проверять отдельные свойства (dojo.isIE, dojo.isFF, dojo.isSafari) для определения платформы, аналогично сделано в другом фреймворке, нашем любимом ExtJS. Кроме этих основных платформ, Dojo поддерживает работу (и автоматически определяет и использует специфический код) и в среде Rhino, Jaxer, Spaydermonkey ну и, конечно, все браузерные платформы, среду Adobe Air и, отдельно выделена поддержка Google Gears. Отмечу, что некоторые  компоненты или возможности доступны только на определённых платформах, поэтому Dojo сначала детектирует глобально, запущен он в среде браузера или другим способом.

Обновлена поддержка многоязычности и локалей, оказалось, что за модулем cldr скрывается данные от сервиса Common Locale Data Repository (http://unicode.org/cldr), который предоставляет различные языковые данные в кодировке Unicode для множества языков. Теперь Dojo использует версию 1.6, которая для работы с составе фреймворка была сильно трансформирована в нужный внутренний формат (подробнее в Readme в директории компонента). На основе  Dojo многие компании делают серьёзные проекты, рассчитанные на мировой рынок, и там локализация будет как нельзя кстати.

Значительно изменён модуль, отвечающий за конфигурацию при загрузке (djConfig.addOnLoad) и позволяющий выполнять пользовательский код после инициализации фреймворка, теперь даже если Dojo подгружается после загрузки страницы и позволяет исполнять как указанный код, функции, так и методы объектов - по сути, любой возможный вариант теперь может быть использован.

Изменения коснулись и режима отладки, теперь перехват ошибок (try/catch) работает корректно во всех модулях и калл-бек функциях, прерывая исполнение кода для отладки при возникновении ошибки, а если режим отладки отключён, то ошибка направляется в лог.

Dijit

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

Dojox

В этом компоненте самое большое количество изменений и интересных новинок. Много изменений в компоненте построения графиков и диаграмм dojox.Charting, добавлены тултипы-подсказки, новые типы диаграмм, поддержка анимации, событий - все для того, чтобы это стало полноценным компонентом среди виджетов, позволяя контролировать все детали и части графиков.

Приятно удивил и компонент для работы с цветом dojox.Color,  который теперь может преобразовывать цвета используя различные цветовые модели - RGB, CMYK/CMY и HSL/HSV.

dojox.gfx дает нам самые широкие возможности в плане работы с графикой, теперь имеет возможность работы с векторной графикой формата SVG и, в частности, загружать и использовать шрифты этого формата. Также значительно переписан рендер, использующий возможности плагина MS Silverlight и не требует теперь сторонних библиотек.

Значительно обновлён компонент для работы с HTML, dojox.html, который теперь делать почти все что угодно с HTML и CSS программным образом, а его возможности используют другие компоненты, тот же gfx.

В пакете Dojox не только различные невизуальные компоненты, но и виджеты, пока не вошедшие в стандартный пакет Dijit, но которые могут пригодится при создании сложных интерфейсов. Здесь есть и визуальный WYSIWYG-редактор с возможностью создания и редактирования таблиц и работой с загружаемыми изображениями, и компонент таблицы (dojox.Grid), который значительно похорошел с предыдущих версий, обзавелся тесной интеграцией с компонентами для работы с данными (dojo.data) и множество улучшений. Так как это самый часто используемый компонент из сложных ajax-виджетов (не считая редакторов), то изменения будут полезны для всех, кто использует таблицы в своих приложениях. Тем более, указывается, что сохранена обратная совместимость с предыдущими версиями.

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

Из других важных изменений я бы отметил только компонент dojox.xml.widgetParser, который разбирает XML-описание виджетов, а значит можно, по идее, формировать описание интерфейса на стороне сервера в виде XML-файла и передавать клиенту для рендеринга. Теперь поддерживается и включение тега <script> для подключения или внешних файлов или включения исполняемого кода прямо в описание видежтов. Остальное - небольшие изменения и правки, расширен компонент для анимации dojox.fx, появился неплохой компонент dojox.widget.Wizard и другие изменения.

Много изменений в компонентах доступа к данным. Появился мощный компонент dojox.data.JsonRestStore для реализации работы с сервисами через REST/JSON с поддержкой HTTP методов GET/POST/PUT/DELETE. dojox.data.CouchDBRestStore - компонент для работы с базой данных CouchDB, достаточно интересный проект, о котором мы скоро расскажем. Одни из компонентов отвечает за работу с GoogleFeedStore, позволяя использовать и обрабатывать различные  форматы фидов от сервисов Google. При этом работа с поиском вынесена в отдельный набор компонент под названием GoogleSearchStore, в котором есть компоненты для обычного поиска, поиска по видео, изображениям и другие виды поиска, включая малоизвестные, например, Book search. dojox.data.S3Store позволяет работать с сервисом S3 от компании Amazon. Вы можете работать и с универсальным интерфейсом dojox.data.ServiceStore с любым сервисом, или же наследовать его и описать компонент для собственной реализации.

Существенно расширены и модули обработки данных в формате JSON - это уже более похоже на работу с данными аналогично базам данных. Компонент dojox.json содержит модуль для реализации различного типа запросов к данным JSONQuery, средства для описания структуры данных и валидации dojox.json.schema. Кстати, и работа с сервисами может происходить в офф-лайн режиме, для этого есть специальные модули dojox.rpc.OfflineRest/dojox.rpc.LocalStorageRest

А теперь рассмотрим новшества и расширения, которые появились в 1.2 ветке Dojox, часть из которых просто уникальная на рынке AJAX-компонент.

Зачастую, статистика в её обычном виде, недоступна для веб-приложений, так как все популярные счётчики работают с обычными веб-сайтами, а вот использование их в составе сложных веб-приложений очень затруднительно. Теперь вы, строя приложение на основе Dojo, можете использовать компонент dojox.analytics.Urchin, предоставляющий все возможности счётчика от Google Analytics, позволяя его встраивать во все компоненты приложения, отложенную загрузки и инициализацию и другие возможности. Вплоть до того, что вы можете вставить счётчик в каком-либо диалоговом окне и отследить, как часто и кто использует тот или иной функционал в этом окне.

dojox.av позволяет использовать стандартный компонент для работы с аудио и видео данными, предоставляет виджет-плеер (dojox.av.widget.Player) для проигрывания роликов.

Если вы используете Flash, то наверняка вам надо компонент для удобной вставки мультимедийных компонент, инициализации плеера, определения версии установленного Flash-компонента, а также, в случае отсутствия, корректная обработка этой ситуации. Для этого есть встроенный компонент dojox.embed, работающий как с Flash, так и QuickTime-плагинами. Теперь можно отказаться от использования сторонних решений, вроде Adobe Flash Detection Kit или SWFObject 2.

Расширены возможности коммуникации, модуля io, теперь можно использовать модель плагинов для работы с другими, не стандартными сейчас возможностями, вроде новых свойств в IE 8, а также реализована передача кроссдоменных данных через механизм window.name.

Если вы хотите использовать более продвинутые модели для разработки, попробуйте обновлённый модуль реализующий аспектно-ориентированное программирование (dojox.lang.aspect), детальнее в этом посте .

Модуль безопасности dojox.secure позволяет добавить к объектам встроенную валидацию, позволяет запретить изменять какие-либо узлы DOM-модели страницы, изменять или переопределять некоторые объекты, а также предоставляет "песочницу" для исполнения кода в строго контролируемой области (dojox.secure.sandbox).

Для тех, кто использует юнит-тестирование для веб-приложений, радость - появился компонент или скорее среда для создания тестов для интерфейсов и виджетов, DOH, что позволит вывести разработку AJAX-приложений на серьёзный уровень. Пакет doh.robot позволяет создавать юнит-тесты для всех компонент (Dojo, Dijit, Dojox), а также предоставляет рекордер (dojox.robot.recorder) для записи и исполнения ваших действий.

Полный ChangeLog изменений доступен здесь.

Да, этот релиз вышел достаточно хороший, добавлены нужные в реальной разработке компоненты и исправлены ошибки. Dojo снова удержал планку самого мощного и функционального фреймворка, однако не следует думать, что его можно применять только в сложных приложениях - если вам необходимо всего несколько компонент, вы и используете только их, библиотека автоматически подгрузит все необходимое и это не скажется особо на длительности загрузки страницы. Релизная версия 1.2 только успела выйти, а Aptana, лучшая из открытых IDE для веб-разработки, уже включила поддержку это ветки в свою среду в виде плагина. Также замечу, что популярный РНР-фреймворк Zend Framework также поставляется теперь с Dojo в качестве расширения функциональности в плане интерфейса, так что если уже такие компании выбрали за основу Dojo, возможно и вам стоит посмотреть на его возможности.

  1. haspadar
    13 октября 2008 в 15:58 | #1

    Отлично, вот только по поводу скорости виджетов не совсем понятно — не дойдут у самого еще руки погонять…
    Действительно ускорили или незаметно?:)

  2. Ray
    13 октября 2008 в 23:45 | #2

    Dojo штука конечно хорошая, но местами явно не дотягивает до уровня Ext Js.

  3. 14 октября 2008 в 00:04 | #3

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

  4. 18 октября 2008 в 23:47 | #4

    Отличный обзор, спасибо! Надо будет подробнее ознакомиться с этой библиотекой…

  5. 19 октября 2008 в 19:57 | #5

    Интересно посмотреть на этот предыдущий большой проект где смешаны два фреймворка Екст и Дожо. Можеш ссылочку кинуть?

  6. 22 октября 2008 в 15:53 | #6

    И я бы с радостью взглянул, жду ссылку…

  7. 22 октября 2008 в 23:25 | #7

    Эх, я бы с радостью, но проект был закрыт, и, скажем так, NDA я не подписывал, но раскрывать проект не могу пока что. Это он-лайновая игра, изначально писалась полностью на Dojo, потом была переведена на интерфейс ExtJS + часть основного кода на Dojo, в основном, невизуальные компоненты — загрузчик, таймеры, сторадж (основной компонент), подсистема 2D рисования, в одном месте использовал слайдер и всплывающие подсказки-информеры в углу. Ага, и сетевая часть была сделана на основе dojo.io.*

  8. 23 октября 2008 в 10:07 | #8

    спасибо. Узнал много нового. Теперь буду пользоваться. Раньше не знал о Dojo Toolkit

  9. 27 октября 2008 в 14:11 | #9

    Удобная вещь, сам пользуюсь!

  10. 30 октября 2008 в 20:39 | #10

    Спасибо. Нужный обзор, прочитал. Подробнее узнать надо будет.

  11. Alex
    7 декабря 2008 в 18:15 | #11

    Что-то на меня Dojo не произвело впечатления, вернее впечатление скорее отрицательное — при попытке сделать простенький проект столкнулся с жуткими проблемами с памятью — раз в полчаса или даже чаще приходится перезагружать браузер — он отжирает по 200 с лишним мегабайт памяти при том что ничего мало мальски подозрительного я не делаю. В первой версии использовал декларативную модель создания интерфейса, во второй программную — стало еще хуже.

  12. 7 декабря 2008 в 18:21 | #12

    А она не предназначена для простеньких проектов. Это для серьезных вещей. хотя конечно сам core можно использовать и просто так. Но эт с пушки по воробьям.

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

  13. Alex
    7 декабря 2008 в 22:14 | #13

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

  14. 7 декабря 2008 в 22:35 | #14

    да нет, логика у меня простая. Если вы колодец себе захотите выкопать, то роторный шагающий экскаватор вам точно что-то не то выроет.
    Тем более, вы слишком мало информации предоставили что и как делали и т.п. Но в общем случае, если вам кнопочку и формочку на сайт вставить — это да, Dojo будет перебором, jQuery достаточно. Есть большой круг задач, где нужен именно такой мощный инструмент, как этот. Но если ваша задача не из этой части, то да, не подойдет. Я, возможно, предвзятый, так как на моих задачах в большинстве случаев нужен именно Dojo а часто и его не хватает, применяю вместе с ExtJS. Который тоже, если одну кнопочку, то не надо тащить пару сотен килобайт кода.
    Впрочем, я знаю, что блог читает как минимум один из команды разработчиков, может он вам что-то ответит?

  15. Alex
    7 декабря 2008 в 23:01 | #15

    Вопрос не стоит — подходит или не подходит Dojo для моих целей. Задача — начальное освоение этого Dojo чтобы понять для чего он вообще подходит. Вывести Hello world проблем не составило, но согласитесь что этого маловато для оценки. А стоило копнуть и все, приехали.

Комментирование отключено.