Dojo Toolkit (estilizado como dōjō toolkit ) es una biblioteca de código abierto modular de JavaScript (o más específicamente, un kit de herramientas de JavaScript ) diseñado para facilitar el desarrollo rápido 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 licencia dual bajo la licencia BSD modificada o la Licencia Libre Académica (≥ 2.1). [5]
La Fundación Dojo fue una organización sin fines de lucro creada con el objetivo de promover la adopción del conjunto de herramientas. En 2016, la fundación se fusionó con la Fundación jQuery para convertirse en la Fundación JS . [6] [7] [8]
Dojo es un framework de JavaScript que se enfoca en las múltiples necesidades del desarrollo web a gran escala del lado del cliente. Por ejemplo, Dojo abstrae las diferencias entre los distintos navegadores para proporcionar API que funcionarán en todos ellos (incluso puede ejecutarse en el servidor bajo Node.js ); establece un framework para definir módulos de código y administrar sus interdependencias; proporciona herramientas de compilación para optimizar JavaScript y CSS , generar documentación y realizar pruebas unitarias; admite la internacionalización, la localización y la accesibilidad ; y proporciona un conjunto completo de clases de utilidad y widgets de interfaz de usuario comúnmente necesarios. [ cita requerida ]
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 requerida ]
El kit de herramientas 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 navegadores cruzados ):
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 de 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"; el servidor puede entonces 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 funcionalidades en paquetes individuales y subpaquetes; el script base " bootstrap " de Dojo 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, cualquier paquete Dojo puede cargarse (a través de XMLHttpRequest u otro transporte similar) utilizando funciones de utilidad suministradas en el bootstrap. 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 requerida ]
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 las dependencias que especifique. [ cita requerida ]
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 creación toma como entrada una lista de paquetes y utiliza Rhino para crear un único archivo comprimido de JavaScript 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 mediante XMLHttpRequest [ cita requerida ] ). Los perfiles preconstruidos para algunos casos de uso comunes están disponibles para su descarga desde la misma ubicación que el kit de herramientas completo.
Además de proporcionar funciones de soporte para leer y escribir cookies , Dojo anteriormente admitía una abstracción de almacenamiento local del lado del cliente llamada Dojo Storage. Dojo Storage permite a las aplicaciones web almacenar 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 nativa del navegador; en otros navegadores, utiliza un subprograma Flash oculto . Con Flash 6+ 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 persistir 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 versión 1.3. [ cita requerida ]
A partir de enero de 2007, Dojo incluye las siguientes implementaciones de almacén de datos del lado del servidor de ejemplo en el espacio de nombres dojo.data : [11]
Dojo se puede utilizar en aplicaciones Adobe AIR basadas en JavaScript . Se ha modificado para cumplir con los requisitos de seguridad de AIR.
SitePen, una empresa de consultoría de Dojo, ha creado una aplicación Adobe AIR llamada "Dojo Toolbox" utilizando Dojo. Incluye un visor de API y una interfaz gráfica de usuario para el sistema de compilación de Dojo. Normalmente, el sistema de compilación se ejecuta desde Rhino, pero en esta aplicación 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 requería trabajo adicional cargar Dojo en distintos dominios, por ejemplo, desde una CDN . Abordar estos problemas fue el principal objetivo 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 obsoleta. Reconociendo esto, los desarrolladores realizaron enormes mejoras en la documentación para la versión 1.8, incluidos nuevos tutoriales, un navegador de API, completando las piezas faltantes y actualizando 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 versiones anteriores, que ya están desactualizadas desde hace varios años. Dado que son anteriores al soporte de AMD y a la reorganización que lo acompañó, los ejemplos de estos libros casi invariablemente se basan en cosas que ahora están obsoletas y ya no son las mejores prácticas. La mayoría de los autores esperan a Dojo 2.0 antes de publicar algo nuevo. [17]
Muchos han comentado que Dojo parece difícil de aprender y comenzar a utilizar, especialmente en comparación con el más popular jQuery . [18] [19]
El cocreador de Dojo, Dylan Schiemann, reconoce esto como una consecuencia de sus diferentes alcances: "Sin duda, 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 por adelantado les ahorra incontables 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 se reescribiera por completo. [16] El cambio a AMD en versiones recientes ha sido igualmente problemático. [19] Dojo se ha esforzado mucho por 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 2.0 de Dojo eliminó gran parte de la API obsoleta y cambió de JavaScript a TypeScript.