¿Las mayores trampas de GWT? [cerrado]

189

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!

Agartzke
fuente
44
Últimamente he notado que algunos sitios web basados ​​en GWT aparecen correctamente en mis resultados de búsqueda de Google, a pesar de que el html subyacente no incluye la información que busco (examples.roughian.com tiene varios de estos tipos de resultados). Parece que el indexador de Google debe estar haciendo una representación inteligente de javascript para descubrir lo que realmente aparecería en una página una vez que todo se carga.
StriplingWarrior

Respuestas:

231

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:

<set-property name="user.agent" value="gecko1_8" />

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.

rustyshelf
fuente
1
Nos hemos encontrado con varios problemas en los que varios estilos / comandos de posicionamiento no parecían "tomar": los estilos no se usaban donde deberían haber estado, o el tamaño de un elemento que parece ignorar la solicitud para que sea 100%. Igual que muchos desafíos regulares de CSS, ¡posiblemente muchos errores de usuario!
agartzke
@agartzke, sí, eso es CSS para ti, y en su mayoría no tiene nada que ver con GWT. Es por eso que empleamos diseñadores altamente calificados para hacer ese tipo de cosas por nosotros. Hacerlo bien en 4 navegadores diferentes nunca es una tarea fácil.
rustyshelf
1
Hay muchas características nuevas que llegarán más adelante este año que mejorarán en gran medida muchos de estos problemas. Modo alojado fuera de proceso (OOPHM), CssResource (obduscation / minification de hoja de estilo), UiBinder (también conocido como 'UI declarativa').
Mark Renouf
Estoy deseando que llegue el 2.0 pero tengo que estar en desacuerdo con que GWT sea el mazo. Si ese es el caso, jQuery y JavaScript son un cludge, en el mejor de los casos. Mi punto es que no obtengo reutilización, termino copiando y pegando muchas cosas (por ejemplo: un cuadro de texto en 4 páginas que se comporta de manera idéntica en cada lugar). Eso no quiere decir que deba descartar todas sus aplicaciones antiguas. Yo (casi) nunca usaría GWT para agregar capacidad a una aplicación html / js existente. También los recursos CSS están en la incubadora y me gustan: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Chris Ruffalo el
2
Puede reutilizar JQuery tanto como puede reutilizar GWT, no creo que sea un argumento válido. Ambos admiten herencia, y luego se pueden empaquetar para su reutilización (archivo .jar para GWT, archivo .js para JQuery). Estoy de acuerdo con lo que dije GWT es un mazo, tienes que codificarlo en Java, tienes que compilarlo, tienes muchas más cosas que gestionar. Sin embargo, si quieres romper una pared de ladrillos, elige el mazo. No es un critiscm, es un punto válido. La herramienta adecuada para el trabajo correcto.
rustyshelf
54

Llevamos casi 2 años trabajando con gwt. Hemos aprendido muchas lecciones. Esto es lo que pensamos:

  1. 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.

  2. 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.

  3. 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 áreas

olibre
fuente
Abrí una pregunta sobre su respuesta en stackoverflow.com/q/10025656/138585 . Te agradeceré si puedes echar un vistazo.
Elad
20

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:

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }

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").

jgindin
fuente
18

GWT 2.0, que se supone que saldrá en algún momento en los próximos meses, resuelve muchos de los problemas discutidos.

  • Cree diseños con una sintaxis similar a html / xml
  • Carga dinámica de scripts: solo se descargará inicialmente el JS esencial. El resto se descargará según sea necesario.
  • Modo hospedado en el navegador: esto podría ocuparse de los problemas de velocidad del modo hospedado discutidos, entre otros beneficios
  • "Optimizaciones del compilador" - Compilación más rápida, con suerte

Video de vista previa de GWT 2.0 en Google I / O

Adam Albrecht
fuente
15

No "no se puede superar", sino un poco de dolor por algo básico.

Manejo de fecha:

GWT utiliza el obsoleto java.util.Dateque puede conducir a un comportamiento inesperado cuando se trata de fechas en el lado del cliente. java.util.Calendarno es compatible con GWT. Más información aquí .

Ejemplos de problemas relacionados:

Jla
fuente
1
Dos años después, y este sigue siendo el caso. Sigue siendo bastante molesto para hacer cálculos de fechas en el cliente.
Joseph Lust
El problema es la traducción (compilación) de java.util.Calendara 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;)
olibre
10

Agregaré algunos puntos a los ya mencionados:

  • Enlace de datos / validación. GWT no tiene un soporte de enlace de datos / validación listo para usar, aunque hay algunos proyectos en esta área que comienzan a surgir. Te encontrarás escribiendo mucho de esto:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Carga lenta. Dado que gwt está del lado del cliente, la carga diferida realmente no es una opción. Tendrá que diseñar sus RPC y objetos de dominio con cuidado para
    • envía todos los datos de tus objetos necesarios
    • evite buscar ansiosamente todos sus datos
    • También deberá asegurarse de no enviar proxies / objetos no serializables. hibernate4gwt puede ayudarlo con estos puntos.
  • Diseño de interfaz de usuario. Es más difícil visualizar una interfaz de usuario en Java (paneles, botones, etc.) que en HTML.
  • Historia de apoyo. GWT no se envía con un subsistema de Historial, ni se envía con ningún subsistema para urls agradables o marcadores con estado. Tendrás que rodar el tuyo (aunque tiene soporte para tokens de Historial, lo cual es un comienzo). Esto sucede con todos los kits de herramientas AJAX AFAIK.

En mi humilde opinión, a GWT le falta un marco que tenga compatibilidad inmediata para todos los problemas mencionados en este 'hilo'.

Miguel Ping
fuente
GWT se envía con un sistema de historial, por ejemplo, History.newItem ("myItem", false); pondrá #myItem en la url, para facilitar el marcado. Para manejar a alguien que carga un marcador con su aplicación, simplemente use History.addValueChangeHandler (myHandlerMethod);
Ztranger
No es un sistema de historial per se, es solo un mecanismo para escribir tokens en URL y manejar notificaciones de cambios de token. Aún tendrá que escribir todo el código de la aplicación para manejar el cambio del historial.
Miguel Ping el
9

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/

JP Richardson
fuente
1
Como esta pregunta aún está activa y obtiene votos, pensé en proporcionar una actualización. Abandoné por completo a GXT (2009-2010) porque no me gustaban las prácticas comerciales de Sencha Inc. Posteriormente abandoné GWT. Temía usar JavaScript durante el tiempo que solía odiarlo. Es decir, hasta que realmente lo entendí. Ahora desarrollo casi exclusivamente en Node.js / AngularJS. Mezcle Bootstrap 3 y puede crear un sitio web de aspecto increíble en mucho menos tiempo que GWT. El futuro es JavaScript, cuanto antes lo abraces, mejor desarrollador serás.
JP Richardson
¿Cuál es tu opinión ahora? (Solo curiosidad) Gracias.
Akos Lukacs
1
@AkosLukacs ¡Todavía puedo informar que estoy usando JavaScript y que me encanta todo! Como dije, lo uso para ODIO JavaScript y, por lo tanto, por qué elegí GWT. La realidad es que no podrá evitar JavaScript si va a realizar algún desarrollo web, por lo que podría adoptarlo. Me he adaptado bastante a usar JavaScript para todo (me desvié un poco con Go). En cuanto a mi pila, uso Node.js / Express / React. Solía ​​ser un gran admirador de Angular y lo conozco bastante bien, pero no puedo recomendar Angular 1.x a cualquiera que comience con JS ya que la curva de aprendizaje es demasiado alta.
JP Richardson
5

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.

Michael Neale
fuente
4

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. ;)

As
fuente
4

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.

Steve Buikhuizen
fuente
1
No sabía sobre el filtro gzip, gracias por ese dato.
agartzke
4

Ligeramente fuera de tema, pero el canal #gwt en irc es muy útil, en caso de que tenga un problema persistente.


fuente
¿En qué red IRC está el canal?
Tovare
Está en freenode (irc.freenode.net). Y en realidad es ## gwt, pero se lo reenviará si escribe #gwt.
stian
4

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.

Beato Geek
fuente
Me gustaría un enlace a los artículos de tu blog;)
ms-tg
h2g2java.blessedgeek.com
Beato Geek
3

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.

ykaganovich
fuente
3
  • La interfaz asíncrona que tiene que escribir para cada interfaz de servicio se parece a algo que podría haber sido generado automáticamente por el compilador GWT.
  • Los tiempos de compilación se vuelven largos para grandes proyectos

Pero para un gran proyecto Javascript es la mejor opción


fuente
3

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:

  • La falta de compatibilidad con el selector CSS3, puede usar "literal ()" en algunos casos para evitarlo.
  • Falta de soporte para CSS3 y eventos modernos del navegador como transitionEnd .
  • Falta de soporte de clase de calendario Java (muchos años después).
  • Falta de soporte JUnit4 (5 años y contando).
  • Falta de hoja de ruta clara y calendario de lanzamiento del equipo de Google GWT.
Joseph Lust
fuente
2

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

<set-property name="user.agent" value="gecko1_8" />

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

Gal Bracha
fuente
1

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 :).

Confusión
fuente
En general, asignar ID no es algo malo si planea hacer una prueba con Selenium.
Petteri Hietavirta
1

Recientemente he trabajado mucho en GWT, y esto es lo que debo decir:

  1. El estilo CSS es complicado solo a veces, use la herramienta de desarrollador de IE en IE y firebug en Firefox para descubrir qué está sucediendo exactamente y obtendrá una idea clara de qué CSS necesita ser cambiado
  2. Puedes usar trucos para que Google lo indexe. Un sitio muy famoso es http://examples.roughian.com/ verifique sus calificaciones en google. Un sitio mucho menos famoso es www.salvin.in (no pude resistir mencionar eso), lo optimicé para palabras: página de inicio de salvin (busque en google estas tres palabras)

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 :)

Salvin Francis
fuente
1

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

Eduardo
fuente
1

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 ):

  • Construcciones incrementales ahora solo segundos
  • SourceMaps más compactos y precisos
  • Soporte GSS
  • JSInterop
  • Gran rendimiento de JavaScript
  • Tamaño de código más pequeño
confile
fuente
1

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.

revs jgleoj23
fuente
0

Reutilización de objetos de servicio RPC.
Causa condiciones de carrera con síntomas que parecen que la aplicación se cuelga.

antony.trupe
fuente
Antonio, ¿podrías explicar esto? Estoy haciendo una llamada RPC al servidor y espero que la GUI responda hasta que vuelva la solicitud, pero parece que se bloquea.
Brett Hannah
0

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.

  1. addWidget (widget) llamará a removefromparent () del widget
Marcel Pater
fuente
0

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).

Alex Rogachevsky
fuente