Aunque GWT se está haciendo muy popular últimamente, es una de las tecnologías más desconocida en el mundo de los desarrolladores Web.
La mayoría creen que es demasiado complicado, otros opinan que sólo sirve para el mundillo Java, y otros creen que es otro framework más para hacer aplicaciones RIA.
En este artículo he hecho un collage ordenando algunas de mis ideas y otras extraídas de la red.
Gwt nace con la misión de mejorar radicalmente la experiencia web de los usuarios, al permitir a los desarrolladores utilizar las herramientas de Java para hacer Ajax y javascript que funcione en cualquier navegador moderno.
- No es una librería más de utilidades Javascript (jquery, prototype ...)
- No es una librería de widgets (jquery-ui, ext, scriptaculous, yui ...)
- No es un framework (mootools, dojo ...)
- No es 'exclusivamente' un kit para crear aplicaciones RIA.
- Es un generador de javascript: convierte código java a javascript.
- Es un compilador, preprocesador, linker y optimizador completo (no sólo compresión y ofuscación).
- Es un SDK (kit de desarrollo).
- Proporciona además un conjunto de herramientas para testear, depurar, estadísticas, etc...
- Además del compilador proporciona un conjunto de módulos: DOM, XML, I18N, JSON, RPC, y Widgets básicos, y mucho mas: css sprite, image bundling...
- Resumiendo, es código java para ejecutarse en la máquina virtual 'browser' en lugar de sobre el 'jre'.
- El código generado puede incluirse en cualquier html (estático o dinámico), y puede interaccionar con éste (modificar el DOM, ejecutar AJAX, validar formularios, por lo que es compatible con SEO y 'progressive enhancement'.
- Para separar la mantenibilidad del código de la efectividad del ejecutable.
- Porque el javascript escrito a mano tiene un conflicto de intereses:
- Identificadores largos y legibles → aplicaciones grandes y lentas.
- Buen Formato → aplicaciones grandes y lentas.
- Comentarios → aplicaciones grandes y lentas
- La solución no es buscar convenciones en el código javascript escrito a mano, es crear un nivel de separación para que no se comprometan ambas (mantenibilidad, efectividad).
- Muchos de los errores mas comunes (sintaxis, errores de escritura, etc) son fácilmente corregibles en tiempo de compilación en lugar de en tiempo de ejecución.
- La sintaxis Javascript es mucho más próxima a la de java que en otros lenguajes, por lo que es mas sencilla la transformación desde java que desde otros.
- Hay muchas mas herramientas en el ecosistema de Java para el desarrollo que para cualquier otro lenguaje.
- El chequeo de tipos de java incrementa la productividad porque reduce errores.
- La creación de paquetes es fácil, y podemos crear .jar que se comparten entre distintas aplicaciones.
- La asistencia en la escritura de código evita errores y acelera la codificación.
- El re-factoring es de verdad.
- Diseño, patrones, OO, que hacen mas fácil de comprender el código Js y las llamadas Ajax, con mucha menos documentación.
- Y sobre todo ... TDD
- Versionado de ficheros (para cada compilación), evitando los problemas de los proxys y caches.
- Los ficheros pueden ser cacheados para siempre.
- Sólo está lo necesario para cada navegador y lenguaje (el usuario descarga sólo lo que usa).
- Se elimina el código no usado (sólo quedan las clases y métodos utilizados).
- Código muy ofuscado, muy comprimido y muy optimizado.
- Ejecución muy rápida en browser pero código legible en eclipse.
- Herramientas para Test y Debug.
- Las librerías de lado servidor (RPC java) permiten que se puedan utilizar los mismos objetos java a ambos lados: Servidor ↔ Cliente
- Javascript:
- GWT genera código mucho más pequeño que el que podamos escribir a mano. A diferencia de las aplicaciones tradicionales en javascript, el compilador de GWT analiza tu código e incluye exclusivamente lo necesario para cada navegador.
- Pudiera no ser más rápido, pero sí mas eficaz.
- Implementa su propio gestor de eventos, que evita 'memory leaks'.
- Usuario:
- Las aplicaciones GWT son normalmente más rápidas que las escritas a mano, y normalmente requieren menos trucos HTTP. Gwt elimina el uso envoltorios para funcionalidades incluidas nativamente sólo en un tipo/versión de navegador.
- Desarrollo:
- Con el ahorro del tiempo invertido en depurar los problemas en cada navegador, puedes emplear mucho mas tiempo en la funcionalidad de tu aplicación. La eficiencia en el desarrollo es la parte favorita en GWT.
- GWT no hace posible nada que no fuera posible hacer de otra manera, pero sí hace que la acción sea mucho mas productiva.
- GWT no intenta ensalzar las virtudes de Java, sino reconocer el pragmatismo de las herramientas existentes, IDEs, entornos de prueba, tipos, etc.
- GWT no quiere hacernos olvidar DOM, CSS, navegador, etc, sino permitir escribir abstracciones de todo ello y hacernos mas productivos que escribiendo código JS a mano.
- Posiblemente, algún día GWT será capaz de compilar otros lenguages, o incluso procesar JS con anotaciones de tipos.
- GWT hace productivo y posible el desarrollo de sitios webs de gran escala y abre la posibilidad de crear aplicaciones de nueva generación de manera fiable.
Más contenido sobre esto.
Leer más.
Cuéntanos qué te parece.