Estoy al principio / a la mitad de un proyecto que elegimos implementar usando GWT. ¿Alguien ha encontrado dificultades importantes en el uso de GWT (y GWT-EXT) que no pudieron superarse? ¿Qué tal desde una perspectiva de rendimiento?
Algunas cosas que hemos visto / escuchado ya incluyen:
- Google no puede indexar contenido
- CSS y el estilo en general parece ser un poco escamoso
Buscando cualquier comentario adicional sobre estos artículos también. ¡Gracias!
Respuestas:
Comenzaré diciendo que soy un gran fanático de GWT, pero sí, hay muchas trampas, pero la mayoría, si no todas, pudimos superar:
Problema: largos tiempos de compilación, a medida que su proyecto crece, también lo hace la cantidad de tiempo que lleva compilarlo. He oído hablar de informes de compilaciones de 20 minutos, pero los míos son en promedio aproximadamente 1 minuto.
Solución: Divida su código en módulos separados y dígale a Ant que solo lo construya cuando se modifique. Además, durante el desarrollo, puede acelerar enormemente los tiempos de compilación compilando solo para un navegador. Puede hacerlo colocando esto en su archivo .gwt.xml:
Donde gecko1_8 es Firefox 2+, ie6 es IE, etc.
Problema: El modo hospedado es muy lento (al menos en OS X) y no se acerca a los cambios 'en vivo' que obtienes cuando editas cosas como páginas JSP o Rails y presionas actualizar en tu navegador.
Solución: puede darle más memoria al modo alojado (generalmente tengo 512M) pero todavía es lento, descubrí que una vez que se vuelve lo suficientemente bueno con GWT, deja de usar esto. Realiza una gran cantidad de cambios, luego compila para un solo navegador (generalmente 20 años de compilación) y luego presiona actualizar en su navegador.
Actualización: con GWT 2.0+, esto ya no es un problema, ya que utiliza el nuevo 'Modo de desarrollo'. Básicamente significa que puede ejecutar el código directamente en el navegador de su elección, por lo que no hay pérdida de velocidad, además puede dispararlo / inspeccionarlo, etc.
http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM
Problema: el código GWT es java y tiene una mentalidad diferente a la de diseñar una página HTML, lo que hace que tomar un diseño HTML y convertirlo en GWT sea más difícil
Solución: Una vez más te acostumbras a esto, pero desafortunadamente convertir un diseño HTML a un diseño GWT siempre será más lento que hacer algo como convertir un diseño HTML a una página JSP.
Problema: GWT requiere un poco de comprensión, y aún no es convencional. Lo que significa que la mayoría de los desarrolladores que se unen a su equipo o mantienen su código tendrán que aprenderlo desde cero
Solución: Queda por ver si GWT despegará, pero si usted es una compañía que controla a quién contrata, siempre puede elegir personas que conozcan GWT o quieran aprenderlo.
Problema: GWT es un mazo en comparación con algo como jquery o simplemente javascript. Se necesita mucha más configuración para que esto suceda que solo incluir un archivo JS.
Solución: utilice bibliotecas como jquery para tareas más pequeñas y simples que se adapten a ellas. Use GWT cuando desee construir algo realmente complejo en AJAX, o donde necesite pasar sus datos de un lado a otro a través del mecanismo RPC.
Problema: a veces para completar su página GWT, debe realizar una llamada al servidor cuando se carga la página por primera vez. Puede ser molesto para el usuario sentarse allí y mirar un símbolo de carga mientras busca los datos que necesita.
Solución: en el caso de una página JSP, su página ya fue procesada por el servidor antes de convertirse en HTML, por lo que puede hacer todas sus llamadas GWT y luego cargarlas previamente en la página, para una carga instantánea. Ver aquí para más detalles:
Acelere la carga de páginas pre-serializando sus llamadas GWT
Nunca he tenido ningún problema con CSS para diseñar mis widgets, listos para usar, personalizados o de otro tipo, así que no sé a qué te refieres con eso.
En cuanto al rendimiento, siempre he descubierto que una vez que el código GWT compilado es rápido, y las llamadas AJAX son casi siempre más pequeñas que hacer una actualización completa de la página, pero eso no es realmente exclusivo de GWT, aunque los paquetes RPC nativos que obtienes si usas Un back end de JAVA es bastante compacto.
fuente
Llevamos casi 2 años trabajando con gwt. Hemos aprendido muchas lecciones. Esto es lo que pensamos:
No utilice bibliotecas de widgets de terceros, especialmente gwt-ext. Eliminará su depuración, desarrollo y rendimiento en tiempo de ejecución. Si tiene preguntas sobre cómo sucede esto, contácteme directamente.
Use gwt para completar solo las partes dinámicas de sus aplicaciones. Entonces, si tiene algunas interacciones complejas de usuario con muchos campos. Sin embargo, no use los paneles que vienen con él. Tome sus páginas existentes suministradas por el diseñador de existencias. Esculpe las áreas que contendrán los controles para tu aplicación. Adjunte estos controles a la página dentro de onModuleLoad (). De esta manera, puede usar las páginas estándar de su diseñador y también hacer todo el diseño fuera del gwt.
No compile toda la aplicación como una página estándar que luego construya dinámicamente todas las piezas. Si haces lo que sugiero en el ítem 2, esto no sucederá de todos modos. Si compila todo dinámicamente, eliminará el rendimiento y consumirá grandes cantidades de memoria para aplicaciones medianas a grandes. Además, si haces lo que te sugiero, el botón de retroceso funcionará muy bien, así que indexará los motores de búsqueda, etc.
Los otros comentaristas también tuvieron algunas buenas sugerencias. La regla general que uso es crear páginas como si estuvieras haciendo una página web estándar. Luego talla las piezas que deben ser dinámicas. Reemplácelos con elementos que tengan id's y luego úselos
RootPanel.get( id ).add( widget )
para completar esas áreasfuente
Errores con los que nos hemos encontrado:
Si bien puede obtener mucho kilometraje al usar algo como GWT EXT, cada vez que usa este tipo de chapa delgada en la parte superior de una biblioteca de JavaScript, pierde la capacidad de depurar. Más de una vez me golpeé la cabeza en el escritorio porque no puedo inspeccionar (dentro de mi depurador IntelliJ) lo que está sucediendo en la clase de tabla GWT EXT ... Todo lo que puedes ver es que es un JavaScriptObject. Esto hace que sea bastante difícil descubrir qué salió mal ...
No tener a alguien en tu equipo que sepa CSS. Desde mi experiencia, no importaba que la persona no fuera experta ... es suficiente que tenga un buen conocimiento práctico y que conozca los términos correctos para google cuando sea necesario.
Depuración a través de navegadores. Esté atento al modo hospedado fuera del proceso [ 1 ] [ 2 ] [ 3 ], con suerte en GWT 1.6 ... Por ahora, solo tiene que hacer las cosas bien con el modo hospedado, luego use el botón "Compilar / Examinar" , donde puedes jugar con otros navegadores. Para mí, trabajar en Windows, esto significa que puedo ver mi trabajo en Firefox y usar FireBug para ayudar a ajustar y mejorar las cosas.
IE6. Es sorprendente lo diferente que IE 6 representará las cosas. He adoptado el enfoque de aplicar un estilo a la "ventana gráfica" más externa de acuerdo con el navegador para poder tener reglas CSS como:
Finalmente, asegúrese de usar un editor que lo ayude. Uso IntelliJ, tiene mucha inteligencia GWT. Por ejemplo, si trato de usar una clase que no es manejada por la emulación JRE, me avisa; si especifico un estilo para un widget, y aún no lo he definido, el código se pone rojo y ondulado ... O, al mirar el CSS, me indicará cuándo he especificado atributos conflictivos en un regla única (No lo he probado todavía, pero entiendo que la versión 8 tiene un soporte GWT aún mejor, como mantener sincronizadas las interfaces e implementaciones RPC "locales" y "asíncronas").
fuente
GWT 2.0, que se supone que saldrá en algún momento en los próximos meses, resuelve muchos de los problemas discutidos.
Video de vista previa de GWT 2.0 en Google I / O
fuente
No "no se puede superar", sino un poco de dolor por algo básico.
Manejo de fecha:
GWT utiliza el obsoleto
java.util.Date
que puede conducir a un comportamiento inesperado cuando se trata de fechas en el lado del cliente.java.util.Calendar
no es compatible con GWT. Más información aquí .Ejemplos de problemas relacionados:
fuente
java.util.Calendar
a JavaScript. También puede echar un vistazo a la clase de GWTCalendarUtil
, ¿Cómo usar java.util.Calendar en GWT y Cómo hacer operaciones de calendario en Java GWT? ¿Cómo agregar días a una fecha? . Cheers;)Agregaré algunos puntos a los ya mencionados:
En mi humilde opinión, a GWT le falta un marco que tenga compatibilidad inmediata para todos los problemas mencionados en este 'hilo'.
fuente
Estoy trabajando en un proyecto en este momento que usa EXT GWT (GXT) que no debe confundirse con GWT EXT. Hay una diferencia, EXT GWT es el que realmente produce la compañía que escribió ExtJS la biblioteca javascript. GWT EXT es un contenedor GWT alrededor de la biblioteca ExtJS. GXT es GWT nativo.
De todos modos, GXT todavía es algo inmaduro y carece de una comunidad sólida que creo que GWT EXT tiene. Sin embargo, el futuro está con GXT, ya que es GWT nativo y realmente desarrollado por la compañía que fabricó ExtJS. GWT EXT está algo dañado cuando la licencia cambió en la biblioteca ExtJS, lo que ralentiza el desarrollo de GWT EXT.
En general, creo que GWT / GXT es una buena solución para desarrollar una aplicación web. En realidad, me gusta bastante el modo alojado para el desarrollo, hace que las cosas sean rápidas y fáciles. También obtienes el beneficio de poder depurar tu código también. Las pruebas unitarias con JUnit también son bastante sólidas. Todavía no he visto un gran marco de prueba de unidad de JavaScript que me pareció lo suficientemente maduro para probar una aplicación empresarial.
Para más información sobre GWT EXT: http://gwt-ext.com/
Para más información sobre EXT GWT (GXT): http://extjs.com/products/gxt/
fuente
No hay dificultades importantes que no haya podido superar fácilmente. Utilice el modo alojado en gran medida. Como está utilizando GWT-ext, casi nunca necesitará tocar CSS usted mismo a menos que desee modificar el aspecto listo para usar.
Mi recomendación es usar un widget "nativo" de GWT sobre una biblioteca en la que tengan características cercanas.
Re indexación de motores de búsqueda: sí, el sitio normalmente no tendrá URL navegables (a menos que solo esté agregando widgets a elementos de un sitio web normal). Sin embargo, puede hacer la funcionalidad de retroceso / avance del historial.
fuente
Utilicé GWT y GWT-ext juntos en un proyecto hace un tiempo. La experiencia me pareció bastante fluida a medida que avanza el desarrollo web, pero mi consejo sería este:
No mezcle widgets nativos GWT con widgets EXT. Es confuso como el infierno, ya que generalmente los nombres son los mismos (GWT.Button o GWText.Button?)
Una cosa que me sucedió que realmente hizo que el código fuera más complejo de lo que me gustaría es que quería un Panel que fuera a) dinámicamente actualizable b) en cascada
Los paneles nativos de GWT son dinámicos, los paneles Ext son en cascada. ¿Solución? Un GWT.VerticalPanel que envuelve un GWTExt Panel ... Caos. :)
Pero bueno, funciona. ;)
fuente
Secundo el comentario de ykagano, la mayor desventaja es perder la V en MVC. Aunque puede separar la verdadera clase ui del resto del código del lado del cliente, no puede usar fácilmente una página HTML generada por un diseñador gráfico / web. Esto significa que necesita un desarrollador para traducir HTML a Java.
Obtenga un editor wysiwyg ui, le ahorrará mucho tiempo. Yo uso GWTDesigner.
La mayor ventaja de GWT es poder olvidarse de los problemas del navegador cruzado. No es 100%, pero elimina casi todo ese dolor. Combinado con el beneficio de la depuración en modo alojado (a diferencia de Firebug, que es excelente pero no lo mismo que un depurador de Java), le da al desarrollador una gran ventaja al generar aplicaciones complejas de ajax.
Ah, y es rápido en tiempo de ejecución, especialmente si usa un filtro gzip.
fuente
Ligeramente fuera de tema, pero el canal #gwt en irc es muy útil, en caso de que tenga un problema persistente.
fuente
GWT es bastante sencillo e intuitivo.
Especialmente con el lanzamiento de UIBinder para permitir que los widgets GWT se presenten en XML y luego se codifiquen en Java.
Entonces, si ha utilizado otras herramientas de diseño Ajax o Flash, o Silverlight, etc., GWT es muy fácil de aprender.
El obstáculo principal, si no es el escollo, es GWT RPC. La razón por la que desea utilizar GWT es debido a GWT async RPC. De lo contrario, ¿por qué no confiar en CSS para formatear su página?
GWT RPC es ese elemento que permite que su servidor actualice los datos en su servidor sin tener que actualizar la página. Este es un requisito absoluto para páginas como el monitoreo del rendimiento de las existencias (o la deuda pública y nacional actual de los EE. UU. O el número de bebés no nacidos abortados en todo el mundo por segundo).
GWT RPC requiere un poco de esfuerzo para entenderlo, pero en unas pocas horas, debería quedar claro.
Por encima de eso, después de hacer un esfuerzo para aprender GWT RPC, finalmente descubres que no puedes usar JSP como componente de servicio para RPC, a menos que ... tenga una serie de 8 partes (creo) en mi blog sobre cómo usar JSP como el administrador de GWT RPC. Sin embargo, como no ha pedido respuestas, sino solo problemas, desistiré de anunciar mi blog.
Entonces. Creo firmemente que los peores obstáculos / dificultades para usar GWT es descubrir cómo implementar correctamente RPC asíncrono GWT y cómo habilitarlo para usar servidores JSP.
fuente
Nos costó mucho unir nuestra base de código GWT con las plantillas web HTML que obtuvimos de un diseñador web (páginas HTML estáticas con divisiones específicas que queríamos que GWT administrara). Al menos cuando lo usamos, no pudimos lograr que GWT se integrara con partes de nuestro sitio web que no estaban codificadas en GWT. Eventualmente lo tuvimos funcionando, pero fue un gran truco.
fuente
Pero para un gran proyecto Javascript es la mejor opción
fuente
GWT 2.4 ha solucionado muchos de los problemas mencionados anteriormente y una gran biblioteca de widgets acaba de salir de Beta (Ext GWT 3.0.4 también conocido como GXT), que está escrito completamente en GWT, no como un contenedor de una biblioteca JS.
Dolor restante:
fuente
Con respecto a GWT 2.4, use Firefox al depurar GWT, mucho más rápido que usando Chrome. Y si solo usará Firefox, considere poner esta línea en su archivo project.gwt.xml
Además, si está utilizando eclipse, agregue lo siguiente en argumentos -> argumentos de VM:
-Xmx512m -XX: MaxPermSize = 1024m -XX: PermSize = 1024m
Puede dividir su servidor y cliente, y usar lo siguiente en argumentos -> Argumentos del programa: -codeServerPort 9997 -startupUrl http: // yourserver / project -noserver
Además, para evitar actualizar su servidor en cada cambio, use JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ Y aquí hay una demostración en vivo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY
fuente
Una trampa importante es que a veces es necesario asignar explícitamente una identificación a lo que finalmente se convierte en un elemento HTML para poder usar ciertos estilos CSS. Por ejemplo: un GWT TabPanel solo hará: pasar el mouse sobre tabBarItems cuando la tabBar del tabPanel tenga asignada una identificación y usted especifique: hover en ese elementId.
Escribí sobre algunas otras desventajas de GWT en otros lugares, pero ya están cubiertas por la respuesta rustyshelfs :).
fuente
Recientemente he trabajado mucho en GWT, y esto es lo que debo decir:
No sé mucho sobre GWT-EXT, pero yo también creo que no es necesario incluir bibliotecas de terceros.
Mucha suerte en tu decisión :)
fuente
GWT explora el navegador en lugar de la detección de características y su aplicación no funcionará en algunos navegadores (especialmente los nuevos)
Aquí hay algunas referencias del problema:
Aquí hay algunas referencias a la detección de características:
Extraído de la comparación de marcos de JavaScript - Wikipedia
fuente
El equipo de GWT realizó muchas mejoras importantes en el lanzamiento del año pasado de GWT 2.7. Una de las principales debilidades de GWT fue que la compilación lleva mucho tiempo en GWT 2.6 y versiones posteriores. Esto ahora se ha ido. GWT no tiene una compilación incremental que es súper rápida y solo compila los cambios.
GWT 2.7 ahora tiene ( Fuente ):
fuente
La mejor manera de obtener datos confiables es a través de la encuesta gwt . Uno de los mayores problemas con GWT siempre ha sido un largo tiempo de compilación. Afortunadamente, está mejorando muy rápidamente, por lo que no será un problema importante en el futuro cercano. Otro escollo es que GWT es dramáticamente más complicado porque Java es un lenguaje más complicado que resiste a los malos programadores en cada paso del camino. Además, la compilación agrega una capa. Por ejemplo, js interop requiere un poco repetitivo. El problema fundamental es que GWT no fue diseñado para ser simple. Fue diseñado desde cero para aplicaciones web extremadamente complicadas y toda la comunidad prioriza constantemente, el rendimiento, la calidad del código, la arquitectura, etc. sobre la codificación fácil.
Recuerde que puede usar js en GWT en cualquier momento, por lo que si tiene problemas con GWT, considere usar js. Al final del día, GWT es js para que pueda hacer cualquier cosa en GWT que pueda hacer en js. De hecho, la mayoría de los proyectos de GWT usan js. El problema es que GWT es drásticamente más complicado. Sin embargo, a veces vale la pena la complejidad adicional.
Vale la pena señalar que GWT 3.0 traerá mejoras masivas.
fuente
Reutilización de objetos de servicio RPC.
Causa condiciones de carrera con síntomas que parecen que la aplicación se cuelga.
fuente
Errores con los que me encontré 1. Comportamiento diferente en modo superdev. Por ejemplo, Someclass.class.getName () funciona absolutamente bien en modo Superdev y devuelve el nombre completo de la clase. En modo productivo esto no funciona.
fuente
GWT es una obra maestra de la tecnología. Une la programación de cliente y servidor convirtiéndola en una aplicación coherente: la forma en que se escribió el software antes de "estratificar" y la forma en que se debe escribir. Elimina diferentes conjuntos de habilidades, falta de comunicación entre los miembros del equipo y, en general, toda la fase de diseño web: tanto artística como de programación. Y es lo más cercano que estarías al móvil, por ejemplo, el desarrollo de Android. De hecho, GWT fue diseñado para generar diferentes IU nativas, no solo HTML. Aunque requiere una enorme disciplina para garantizar tal desacoplamiento, para mantener sus capas internas independientes de la presentación.
El primer error que debe evitar, que me llevó cuatro años darme cuenta, es usar extensiones de terceros como EXT-GWT, también conocido como GXT y SmartGWT. Es muy tentador comenzar a usar sus bonitos widgets de escritorio en lugar de invertir en su propio estilo, pero no puedo decir cuántos problemas tuve con SmartGWT hasta que finalmente me cansé. En resumen, congela el conjunto de características GWT centrales en el nivel determinado (bastante desactualizado) y luego se construye sobre él. También tenga en cuenta que esa apariencia de escritorio cincelada se ve tonta hoy en día, sin mencionar el rendimiento lento, toneladas de errores y características de compatibilidad, especialmente en dispositivos móviles. Desea permanecer lo más cerca posible de los controles nativos del navegador, es decir, los menús desplegables representados como elementos <select> nativos, no algunos controles pintados a medida.
Gracias a las tendencias móviles, todo el UX se está volviendo más simple y plano, por lo que no necesita hacer mucho para diseñar una aplicación de aspecto nítido. Aunque si quieres un aspecto "3D", también hay gradientes. CSS3 lo hizo todo fácil, y GWT lo envuelve de una manera elegante orientada a objetos, a diferencia del CSS sin formato. Por lo tanto, no se desanime mirando los controles bastante feos en el Showcase de GWT. El equipo de GWT intencionalmente no ofreció ningún estilo, porque es el trabajo del desarrollador.
El resto es una programación de navegador bastante convencional en Java fuertemente tipado con hermosas API concisas. Pero, por supuesto, nunca olvide que su código se ejecuta dentro del navegador, por lo que todas las llamadas son asíncronas, por ejemplo, no puede llamar a los métodos GWT-RPC en un bucle (para completar alguna lista), pero necesita encadenarlos recursivamente si alguna vez llega a esto situación.
Hay algunos autoproclamados "antipatrones" como no usar GWT-RPC. Ha sido bueno para mí hasta ahora: durante 10 años. La simplicidad es la clave. No pensaría ni un segundo en sacrificar un rendimiento marginal por la elegancia y facilidad de mantenimiento del código. Además, aquí no es donde estarían sus cuellos de botella, en la base de datos. Por supuesto, tenga en cuenta la cantidad de datos que está enviando al cliente.
Y si no puede encontrar o diseñar el gadget existente, lea un rico conjunto de elementos HTML5, siempre puede envolver uno de terceros. Lo hice con un popular jQuery FullCalendar. No es ciencia de cohetes en absoluto. Todo lo demás, como Google Maps y Google Charts, tiene contenedores GWT semioficiales.
GWT es perfecto. La única razón por la que no recibe suficiente amor es porque los primeros usuarios de Internet que aún influyen en la industria no vinieron de la informática y los lenguajes orientados a objetos para apreciarlos. Tienen un fondo artístico (Photoshop / WordPress) o de red (Perl / Python).
fuente