tutorial google examples descargar java performance gwt

java - google - ¿Cómo acelerar el compilador gwt?



gwt java tutorial (10)

Aunque esta entrada es bastante antigua y la mayoría de ustedes probablemente ya lo saben, creo que vale la pena mencionar que GWT 2.x incluye un nuevo indicador de compilación que acelera las compilaciones saltándose las optimizaciones. Definitivamente no debería implementar JavaScript compilado de esa manera, pero puede ser un ahorro de tiempo durante las compilaciones continuas que no son de producción.

Simplemente incluya la bandera: -draftCompile en su línea de compilación GWT.

Estamos empezando a hacer un uso más intenso de GWT en nuestros proyectos, y el rendimiento del compilador GWT se está volviendo cada vez más molesto.

Vamos a comenzar a modificar nuestras prácticas de trabajo para mitigar el problema, incluyendo un mayor énfasis en el navegador de modo alojado, que difiere la necesidad de ejecutar el compilador GWT hasta un momento posterior, pero eso conlleva sus propios riesgos, en particular el de No detectamos problemas con navegadores reales hasta mucho más tarde de lo que nos gustaría.

Idealmente, nos gustaría hacer que el compilador GWT en sí sea más rápido: un minuto para compilar una aplicación bastante pequeña es echar la meada. Sin embargo, estamos usando la compilación de una manera bastante ingenua, así que espero que podamos obtener algunos beneficios rápidos y fáciles.

Actualmente estamos invocando com.google.gwt.dev.Compiler como una aplicación java de ant Ant target, con 256 m de capacidad máxima y un montón de espacio de pila. El compilador es lanzado por Ant utilizando fork = true y el último Java 6 JRE, para probar y aprovechar el rendimiento mejorado de Java6. Pasamos nuestra clase de controlador principal al compilador junto con el classpath de la aplicación, y se apaga.

¿Qué más podemos hacer para obtener algo de velocidad extra? ¿Podemos darle más información para que dedique menos tiempo a descubrir qué hacer?

Sé que podemos decir que solo se compile para un navegador, pero necesitamos hacer pruebas de múltiples navegadores, por lo que no es realmente práctico.

Todas las sugerencias son bienvenidas en este punto.


Comencemos con la incómoda verdad: el rendimiento del compilador GWT es realmente malo. Puede usar algunos hacks aquí y allá, pero no obtendrá un rendimiento significativamente mejor.

Un buen truco de rendimiento que puedes hacer es compilar solo para navegadores específicos, insertando la siguiente línea en tu gwt.xml :

<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>

o en la sintaxis de gwt 2.x, y solo para un navegador:

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

Esto, por ejemplo, compilará su aplicación solo para IE y FF. Si sabe que está usando solo un navegador específico para las pruebas, puede usar este pequeño truco.

Otra opción: si está usando varias configuraciones regionales, y nuevamente usa solo una para las pruebas, puede comentarlas todas para que GWT use la configuración regional predeterminada, esto elimina una sobrecarga adicional del tiempo de compilación.

En pocas palabras: no va a obtener un aumento de orden de magnitud en el rendimiento del compilador, pero si toma varias relajaciones, puede afeitarse unos minutos aquí y allá.


El compilador GWT está realizando una gran cantidad de análisis de código, por lo que será difícil acelerarlo. Esta sesión de Google IO 2008 le dará una buena idea de lo que está haciendo GWT y por qué lleva tanto tiempo.

Mi recomendación es para el desarrollo, utilice el modo alojado tanto como sea posible y luego compile solo cuando quiera hacer su prueba. Esto suena como la solución a la que ya llegó, pero básicamente esa es la razón por la que el Modo Hosted está ahí (bueno, eso y la depuración).

Puede acelerar la compilación de GWT, pero solo compilar para algunos navegadores, en lugar de los 5 tipos que GWT realiza de forma predeterminada. Si desea utilizar el modo hospedado, asegúrese de compilar para al menos dos navegadores; si compila para un solo navegador, el código de detección del navegador se optimiza y el Modo Hosted no funciona más.

Una forma fácil de configurar la compilación para menos navegadores es crear un segundo módulo que herede de su módulo principal:

<module rename-to="myproject"> <inherits name="com.mycompany.MyProject"/> <!-- Compile for IE and Chrome --> <!-- If you compile for only one browser, the browser detection javascript is optimised away and then Hosted Mode doesn''t work --> <set-property name="user.agent" value="ie6,safari"/> </module>

Si el atributo de rename-to se establece de la misma manera, los archivos de salida serán los mismos que si hiciera una compilación completa



En las versiones más recientes de GWT (a partir de 2.3 o 2.4, creo), también puede agregar

<collapse-all-properties />

a su gwt.xml para fines de desarrollo. Eso le dirá al compilador GWT que cree una única permutación que cubra todos los entornos locales y navegadores. Por lo tanto, aún puede probar en todos los navegadores e idiomas, pero solo está compilando una sola permutación


Para GWT 2.x acabo de descubrir que si usas

<set-property name="user.agent" value="ie6"/> <extend-property values="ie8,gecko1_8" name="user.agent"/>

Incluso puede especificar más de una permutación.


Puedes agregar una opción a tu compilación para la producción:

-localWorkers 8 : donde 8 es el número de subprocesos simultáneos que calculan permutaciones. Todo lo que tiene que hacer es ajustar este número al número que le resulte más conveniente. Ver el rendimiento de compilación de GWT (gracias al comentario de Dennis Ich).

Si está compilando para el entorno de prueba, también puede usar:

-draftCompile que permite -draftCompile más rápidas, pero menos optimizadas

-optimize 0 que no optimiza su código (9 es el valor máximo de optimización)

Otra cosa que más que duplicó la compilación y el rendimiento en modo hospedado fue el uso de un disco SSD (ahora el modo alojado funciona como un encanto). ¡No es una solución barata, pero dependiendo de cuánto use GWT y el costo de su tiempo, puede valer la pena!

¡Espero que esto te ayude!


Si ejecuta el compilador GWT con el indicador -localWorkers, el compilador compilará varias permutaciones en paralelo. Esto le permite utilizar todos los núcleos de una máquina con varios núcleos, por ejemplo, -localWorkers 2 le indicará al compilador que compile dos permutaciones en paralelo. No obtendrá diferencias de orden de magnitudes (no todo en el compilador es paralelizable) pero sigue siendo una aceleración notable si está compilando múltiples permutaciones.

Si está dispuesto a usar la versión troncal de GWT, podrá usar el modo alojado para cualquier navegador (modo fuera del proceso alojado ), que alivia la mayoría de los problemas actuales con el modo alojado. Parece que ahí es donde se dirige el GWT: siempre se desarrolla con el modo hospedado, ya que las compilaciones probablemente no obtendrán magnitudes más rápido.


Aquí hay una lista de valores de user.agent que puede configurar.

(Agregando esto aquí porque sigo terminando aquí cuando busco lo que debería configurar para que solo produzca una permutación para Chrome. La respuesta es: <set-property name="user.agent" value="safari"/> )


  • Divida su aplicación en múltiples módulos o puntos de entrada y vuelva a compilar solo cuando sea necesario.
  • Analice su aplicación utilizando la versión troncal, que proporciona la historia de su compilación . Esto puede o no ser relevante para el compilador 1.6, pero puede indicar lo que está sucediendo.