Dojo Toolkit (estilizado como dōjō toolkit ) es una biblioteca de JavaScript modular de código abierto (o más específicamente un kit de herramientas de JavaScript ) diseñada para facilitar el rápido desarrollo de aplicaciones y sitios web multiplataforma basados en JavaScript/ Ajax . Fue iniciado por Alex Russell, Dylan Schiemann, David Schontzler y otros en 2004 [1] y tiene doble licencia bajo la licencia BSD modificada o la Licencia Académica Libre (≥ 2.1). [5]
La Fundación Dojo era una organización sin fines de lucro creada con el objetivo de promover la adopción del kit de herramientas. En 2016, la fundación se fusionó con jQuery Foundation para convertirse en JS Foundation . [6] [7] [8]
Dojo es un marco de JavaScript que aborda las numerosas necesidades del desarrollo web del lado del cliente a gran escala. Por ejemplo, Dojo abstrae las diferencias entre diversos navegadores para proporcionar API que funcionarán en todos ellos (incluso puede ejecutarse en el servidor bajo Node.js ); establece un marco para definir módulos de código y gestionar sus interdependencias; proporciona herramientas de compilación para optimizar JavaScript y CSS , generar documentación y pruebas unitarias; apoya la internacionalización, localización y accesibilidad ; y proporciona un rico conjunto de clases de utilidades y widgets de interfaz de usuario comúnmente necesarios. [ cita necesaria ]
Dojo es completamente de código abierto . El conjunto de herramientas incluye alrededor de tres mil módulos de JavaScript, además de imágenes y otros recursos. [ cita necesaria ]
El kit de herramientas de Dojo está organizado en varias partes:
Los widgets de Dojo son componentes, que comprenden código JavaScript , marcado HTML y declaraciones de estilo CSS , que proporcionan funciones interactivas para múltiples navegadores (que no deben confundirse con varios navegadores ):
Una característica importante de las aplicaciones Ajax es la comunicación asincrónica del navegador con el servidor: se intercambia información y se actualiza la presentación de la página sin necesidad de recargar toda la página. Tradicionalmente, esto se hace con el objeto JavaScript XMLHttpRequest . Dojo proporciona un contenedor abstracto ( dojo.xhr
) alrededor de las implementaciones de XMLHttpRequest en varios navegadores web y dojo.io
también admite otros transportes (como IFrames ocultos ) y una variedad de formatos de datos. Con este enfoque, es fácil enviar los datos que un usuario ingresa en un formulario al servidor "entre bastidores"; Luego, el servidor puede responder con algún código JavaScript que actualice la presentación de la página. [9]
Dojo proporciona un sistema de empaquetado para facilitar el desarrollo modular de funcionalidad en paquetes y subpaquetes individuales; el script base Dojo " bootstrap " inicializa un conjunto de espacios de nombres de paquetes jerárquicos ("io", "event", etc.) bajo un espacio de nombres raíz "dojo" . Después de la inicialización del espacio de nombres raíz, se puede cargar cualquier paquete Dojo (a través de XMLHttpRequest u otro transporte similar) utilizando las funciones de utilidad proporcionadas en el programa de arranque. También es posible inicializar espacios de nombres adicionales dentro o en paralelo al espacio de nombres "dojo", lo que permite extensiones de Dojo o el desarrollo de espacios de nombres privados administrados por Dojo para bibliotecas y aplicaciones de terceros. [ cita necesaria ]
Los paquetes Dojo pueden constar de varios archivos y pueden especificar qué archivos constituyen el paquete completo. Cualquier paquete o archivo también puede especificar una dependencia de otros paquetes o archivos; cuando se carga el paquete, también se cargarán todas las dependencias que especifique. [ cita necesaria ]
Se proporcionan soluciones alternativas para la carga entre dominios de la mayoría de los paquetes de Dojo (aunque esto requiere una compilación especializada de Dojo).
Dojo también proporciona un mecanismo para crear "perfiles"; el sistema de compilación toma como entrada una lista de paquetes y utiliza Rhino para crear un único archivo JavaScript comprimido que contiene esos paquetes y todas sus dependencias. Esto permite cargar e inicializar todo el código necesario a la vez y permite el almacenamiento en caché del código (la mayoría de los navegadores web no almacenan en caché los archivos cargados a través de XMLHttpRequest [ cita requerida ] ). Los perfiles prediseñados para algunos casos de uso comunes están disponibles para descargar desde la misma ubicación que el kit de herramientas completo.
Además de proporcionar funciones de soporte para la lectura y escritura de cookies , Dojo anteriormente admitía una abstracción de almacenamiento local del lado del cliente llamada Dojo Storage. Dojo Storage permite que las aplicaciones web almacenen datos en el lado del cliente, de forma persistente y segura y con el permiso del usuario. Funciona en todos los navegadores web existentes, incluidos Internet Explorer , Firefox y Safari . Cuando se incluye en una página web, Dojo Storage determina el mejor método para almacenar información de forma persistente. Firefox 2 utiliza la persistencia del navegador nativo; en otros navegadores, utiliza un subprograma Flash oculto . Dado que Flash 6+ está instalado en aproximadamente el 95% de las computadoras conectadas a la web, [10] esto hace que el mecanismo de almacenamiento sea accesible para gran parte de la base instalada de la web. Para una aplicación web cargada desde el sistema de archivos, es decir, desde una URL file://, Dojo Storage utilizará de forma transparente XPCOM en Firefox y ActiveX en Internet Explorer para conservar la información. El programador que utiliza Dojo Storage se abstrae del mecanismo de almacenamiento utilizado y se le presenta una abstracción de tabla hash simple , con métodos como put() y get(). Dojo Storage no es compatible con versiones posteriores a la 1.3. [ cita necesaria ]
A partir de enero de 2007, Dojo incluye los siguientes ejemplos de implementaciones de almacén de datos del lado del servidor en el espacio de nombres dojo.data : [11]
Dojo se puede utilizar en aplicaciones Adobe AIR basadas en JavaScript . Ha sido modificado para cumplir con los requisitos de seguridad de AIR.
SitePen, una empresa de consultoría de Dojo, ha creado una aplicación de Adobe AIR llamada "Dojo Toolbox" utilizando Dojo. Incluye un visor API y una GUI para el sistema de compilación de Dojo. Normalmente, el sistema de compilación se ejecuta desde Rhino, pero en esta aplicación de AIR el sistema de compilación se puede ejecutar desde AIR, sin el uso de Java. [12]
Las versiones anteriores de Dojo tenían fama de ser voluminosas y lentas de cargar. [13] También requirió trabajo adicional para cargar Dojo en todos los dominios, por ejemplo, desde una CDN . Abordar estos problemas fue el objetivo principal de Dojo 1.7, que introdujo la definición de módulo asincrónico (AMD) y un cargador "nano". [14]
Dojo ha sido criticado durante mucho tiempo por su documentación incompleta, dispersa y desactualizada. Al reconocer esto, los desarrolladores realizaron grandes mejoras en la documentación para la versión 1.8, incluidos nuevos tutoriales, un navegador API, completar las piezas que faltaban y actualizar la mayoría de los ejemplos al estilo AMD . [15] [16]
Se han escrito varios libros sobre Dojo, pero todos se basan en Dojo 1.3 o anterior, ahora con varios años de desactualización. Dado que estos son anteriores al soporte de AMD y la reorganización que lo acompaña, los ejemplos en estos libros casi invariablemente se basan en cosas que ahora están en desuso y que ya no son las mejores prácticas. La mayoría de los autores esperan Dojo 2.0 antes de publicar algo nuevo. [17]
Muchos han comentado que parece difícil aprender y empezar a utilizar Dojo, especialmente en comparación con el más popular jQuery . [18] [19]
El cocreador de Dojo, Dylan Schiemann, reconoce esto como consecuencia de sus diferentes alcances: "Ciertamente es más fácil aprender algo que es más pequeño que algo que hace más, pero nuestros ávidos usuarios se apresuran a señalar que un poco más de aprendizaje inicial les ahorra innumerables horas para cosas que Dojo hace fáciles." [13]
Los primeros usuarios se enfrentaron a una transición difícil a la versión 1.0 después de que el kit de herramientas fuera totalmente reescrito. [16] El cambio a AMD en versiones recientes ha sido igualmente problemático. [19] Dojo se ha esforzado mucho para mantener la compatibilidad con versiones anteriores a pesar de su rápida evolución, con una gran parte de la API actual obsoleta pero aún mantenida, pero los usuarios a menudo han descubierto que las actualizaciones no se realizaron tan bien como esperaban.
La versión Dojo 2.0 eliminó gran parte de la API obsoleta y cambió de JavaScript a TypeScript.