Dojo Toolkit (стилизованный под dōjōtoolkit ) — это модульная библиотека JavaScript с открытым исходным кодом (или, точнее, набор инструментов JavaScript ), предназначенная для облегчения быстрой разработки кроссплатформенных приложений и веб-сайтов на основе JavaScript/ Ajax . Он был запущен Алексом Расселом, Диланом Шиманном, Дэвидом Шонцлером и другими в 2004 году [1] и имеет двойную лицензию : модифицированную лицензию BSD или Академическую свободную лицензию (≥ 2.1). [5]
Фонд Додзё был некоммерческой организацией, созданной с целью содействия внедрению набора инструментов. В 2016 году фонд объединился с jQuery Foundation и стал JS Foundation . [6] [7] [8]
Dojo — это платформа JavaScript , ориентированная на многие потребности крупномасштабной клиентской веб-разработки. Например, Dojo абстрагирует различия между различными браузерами, чтобы предоставить API, которые будут работать во всех из них (он может даже работать на сервере под управлением Node.js ); он устанавливает основу для определения модулей кода и управления их взаимозависимостями; он предоставляет инструменты сборки для оптимизации JavaScript и CSS , создания документации и модульного тестирования; он поддерживает интернационализацию, локализацию и доступность ; и он предоставляет богатый набор часто необходимых служебных классов и виджетов пользовательского интерфейса. [ нужна цитата ]
Dojo имеет полностью открытый исходный код . В набор инструментов входит около трёх тысяч модулей JavaScript, помимо изображений и других ресурсов. [ нужна цитата ]
Dojo Toolkit состоит из нескольких частей:
Виджеты Dojo — это компоненты, включающие код JavaScript , разметку HTML и объявления стилей CSS , которые обеспечивают мультибраузерность (не путать с кроссбраузерностью ) интерактивные функции:
Одной из важных особенностей приложений Ajax является асинхронная связь браузера с сервером: происходит обмен информацией и обновление представления страницы без необходимости перезагрузки всей страницы. Традиционно это делается с помощью объекта JavaScript XMLHttpRequest . Dojo предоставляет абстрактную оболочку ( dojo.xhr
) для реализаций XMLHttpRequest в различных веб-браузерах, а dojo.io
также поддерживает другие транспорты (например, скрытые IFrames ) и различные форматы данных. Используя этот подход, можно легко отправить данные, которые пользователь вводит в форму, на сервер «за кулисами»; Затем сервер может ответить некоторым кодом JavaScript, который обновляет представление страницы. [9]
Dojo предоставляет систему пакетов для облегчения модульной разработки функциональности в отдельных пакетах и подпакетах; базовый сценарий начальной загрузки Dojo инициализирует набор иерархических пространств имен пакетов — «io», «event» и т. д. — в корневом пространстве имен «dojo» . После инициализации корневого пространства имен любой пакет Dojo может быть загружен (через XMLHttpRequest или другой подобный транспорт) с помощью служебных функций, поставляемых в загрузочном файле. Также возможно инициализировать дополнительные пространства имен внутри пространства имен «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% компьютеров, подключенных к Интернету, [10] это делает механизм хранения доступным для большей части установленной базы Интернета. Для веб-приложения, загруженного из файловой системы, т. е. из URL-адреса file://, хранилище Dojo будет прозрачно использовать XPCOM в Firefox и ActiveX в Internet Explorer для сохранения информации. Программист, использующий Dojo Storage, абстрагируется от используемого механизма хранения и ему предоставляется простая абстракция хэш-таблицы с такими методами, как put() и get(). Dojo Storage не поддерживается в версиях позже 1.3. [ нужна цитата ]
По состоянию на январь 2007 года Dojo включает следующие примеры реализации хранилища данных на стороне сервера в пространстве имен dojo.data : [11]
Dojo можно использовать в приложениях Adobe AIR на основе JavaScript . Он был изменен в соответствии с требованиями безопасности AIR.
SitePen, консалтинговая компания Dojo, создала приложение Adobe AIR под названием «Dojo Toolbox» с использованием Dojo. Он включает в себя средство просмотра API и графический интерфейс системы сборки Dojo. Обычно система сборки запускается из Rhino, но в этом приложении AIR систему сборки можно запускать из AIR без использования Java. [12]
Более ранние версии Dojo имели репутацию громоздких и медленно загружающихся. [13] Также потребовалась дополнительная работа для загрузки Dojo между доменами, например, из CDN . Решение этих проблем было основной целью Dojo 1.7, в котором было представлено асинхронное определение модулей (AMD) и «нано»-загрузчик. [14]
Dojo уже давно критикуют за неполную, разрозненную и устаревшую документацию. Признавая это, разработчики внесли огромные улучшения в документацию для версии 1.8, включая новые учебные пособия, API-браузер, дополнив недостающие части и обновив большинство примеров в стиле AMD . [15] [16]
О Dojo написано множество книг, но все они основаны на Dojo 1.3 или более ранних версиях, которые уже устарели на несколько лет. Поскольку они предшествовали поддержке AMD и сопровождающей ее реорганизации, примеры в этих книгах почти всегда основаны на вещах, которые сейчас устарели и больше не являются лучшими практиками. Большинство авторов ждут Dojo 2.0, прежде чем публиковать что-то новое.[17]
Многие отметили, что Dojo кажется трудным для изучения и начала работы, особенно по сравнению с более популярным jQuery . [18] [19]
Один из создателей Dojo Дилан Шиманн признает это из-за различий в возможностях: «Конечно, легче выучить что-то меньшее, чем что-то, что делает больше, но наши заядлые пользователи сразу отмечают, что немного больше обучения заранее экономит им бесчисленное количество часы на вещи, которые в Додзё делаются легко». [13]
Первые пользователи столкнулись с трудностью перехода на версию 1.0 после того, как инструментарий был полностью переписан. [16] Переход на AMD в последних версиях оказался столь же проблематичным. [19] Dojo приложила немало усилий для поддержания обратной совместимости, несмотря на свое быстрое развитие: большая часть текущего API устарела, но все еще поддерживается, но пользователи часто обнаруживали, что обновления проходили не так гладко, как хотелось бы.
В версии Dojo 2.0 удалена большая часть устаревшего API и переключен с JavaScript на TypeScript.