Введение

Модульная библиотека JavaScript с открытым исходным кодом

Dojo Toolkit (стилизованная как dōjō toolkit) — это модульная библиотека JavaScript с открытым исходным кодом (или, точнее, набор инструментов JavaScript), предназначенная для упрощения быстрой разработки кроссплатформенных веб-приложений и веб-сайтов, основанных на JavaScript/Ajax. Она была создана Алексом Расселом, Диланом Шиманом, Дэвидом Шонтцлером и другими в 2004 году и распространяется под двойной лицензией: модифицированной BSD-лицензии или Академической свободной лицензии (≥ 2.1).

Асинхронная связь

Одной из важных особенностей приложений Ajax является асинхронная связь браузера с сервером: информация обменивается, а отображение страницы обновляется без необходимости перезагрузки всей страницы. Традиционно это осуществляется с помощью JavaScript-объекта XMLHttpRequest. Dojo предоставляет абстрактный интерфейс (dojo.xhr) для различных реализаций XMLHttpRequest в веб-браузерах, а dojo.io также поддерживает другие способы передачи данных (например, скрытые IFrames) и различные форматы данных. С помощью этого подхода можно легко отправлять данные, введенные пользователем в форму, на сервер "в фоновом режиме"; сервер, в свою очередь, может ответить кодом JavaScript, который обновит отображение страницы.

Система упаковки

Dojo предоставляет систему пакетирования для упрощения модульной разработки функциональности в отдельных пакетах и подпакетах; базовый скрипт Dojo "bootstrap" инициализирует набор иерархических пространств имен пакетов — "io", "event" и т. д. — под корневым пространством имен "dojo". После инициализации корневого пространства имен любой пакет Dojo может быть загружен (через XMLHttpRequest или другой аналогичный механизм) с использованием вспомогательных функций, предоставляемых в bootstrap. Также возможно инициализировать дополнительные пространства имен внутри или параллельно пространству имен "dojo", что позволяет расширять Dojo или разрабатывать собственные пространства имен, управляемые Dojo, для сторонних библиотек и приложений. Пакеты Dojo могут состоять из нескольких файлов и могут указывать, какие файлы составляют весь пакет. Любой пакет или файл также может указывать зависимость от других пакетов или файлов; при загрузке пакета будут загружены и все указанные им зависимости. Предусмотрены решения для загрузки пакетов Dojo между доменами (хотя для этого требуется специальная сборка Dojo). Dojo также предоставляет механизм для создания "профилей"; система сборки принимает на вход список пакетов и использует Rhino для создания единого сжатого JavaScript-файла, содержащего эти пакеты и все их зависимости. Это позволяет загружать и инициализировать весь необходимый код одновременно, а также обеспечивает кэширование кода (большинство веб-браузеров не кэшируют файлы, загруженные через XMLHttpRequest). Предварительно созданные профили для некоторых распространенных сценариев использования доступны для скачивания с того же ресурса, что и полный инструментарий.

Хранение данных на стороне клиента

В дополнение к функциям поддержки для чтения и записи cookie, Dojo ранее поддерживала локальную абстракцию хранения данных на стороне клиента под названием Dojo Storage. Dojo Storage позволяла веб-приложениям хранить данные на стороне клиента постоянно, безопасно и с разрешения пользователя. Она работала в существующих веб-браузерах, включая Internet Explorer, Firefox и Safari. При включении в веб-страницу, Dojo Storage определяла оптимальный метод для постоянного хранения информации. Firefox 2 использовал встроенные возможности браузера для хранения данных, а в других браузерах использовался скрытый Flash-апплет. Поскольку Flash 6+ был установлен на приблизительно 95% компьютеров, подключенных к сети Интернет, это делало механизм хранения доступным для значительной части пользовательской базы. Для веб-приложения, загруженного из файловой системы, то есть по URL-адресу file://, Dojo Storage прозрачно использовала XPCOM в Firefox и ActiveX в Internet Explorer для сохранения информации. Программист, использующий Dojo Storage, был абстрагирован от используемого механизма хранения и получал доступ к простому представлению в виде хэш-таблицы с методами, такими как put и get. Dojo Storage не поддерживается в версиях, выпущенных после версии 1.3.

Поддержка Adobe Integrated Runtime (AIR)

Dojo может использоваться в приложениях Adobe AIR, основанных на JavaScript. Он был модифицирован для соответствия требованиям безопасности AIR. SitePen, компания, предоставляющая консультации по Dojo, разработала приложение Adobe AIR под названием "Dojo Toolbox" с использованием Dojo. Оно включает в себя просмотрщик API и графический интерфейс для системы сборки Dojo. Обычно система сборки запускается в среде Rhino, но в этом AIR-приложении система сборки может быть запущена непосредственно из AIR, без использования Java.

Загрузка

Ранние версии Dojo имели репутацию громоздких и медленной загрузки. Кроме того, требовались дополнительные усилия для загрузки Dojo в разных доменах, например, с использованием CDN. Решение этих проблем было основной целью Dojo 1.7, который представил асинхронное определение модулей (AMD) и "нано" загрузчик.

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

Доджо уже давно критикуется за неполную, фрагментированную и устаревшую документацию. Признавая это, разработчики значительно улучшили документацию для выпуска 1.8, добавив новые учебные пособия, обозреватель API, заполнив пробелы и обновив большинство примеров до стиля AMD. О Доджо написано несколько книг, но все они основаны на версиях Dojo 1.3 или более ранних, которые устарели на несколько лет. Поскольку эти книги были написаны до появления поддержки AMD и связанной с ней реорганизации, примеры в них почти неизменно используют устаревшие подходы, которые больше не рекомендуются. Большинство авторов ждут выхода Dojo 2.0, прежде чем публиковать новые материалы.

Кривая обучения

Многие отмечают, что Dojo кажется сложным в освоении и запуске, особенно по сравнению с более популярным jQuery. Один из создателей Dojo, Дилан Шиман, признает это следствием различного масштаба проектов: "Безусловно, легче изучать что-то меньшее по объему, чем что-то более функциональное, но наши преданные пользователи быстро указывают на то, что немного больше усилий на начальном этапе экономит им огромное количество времени на задачах, которые Dojo упрощает".

Стабильность API

Ранние пользователи столкнулись со сложным переходом к выпуску версии 1.0 после полной переработки инструментария. Переход на AMD в последних версиях также оказался проблематичным. Dojo приложил значительные усилия для сохранения обратной совместимости, несмотря на стремительное развитие, при этом большая часть текущего API объявлена устаревшей, но продолжает поддерживаться, однако пользователи часто обнаруживали, что обновления проходили не так гладко, как они надеялись. Выпуск Dojo 2.0 удалил значительную часть устаревшего API и перешел с JavaScript на TypeScript.