¿Cómo acelero el comstackdor gwt?

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

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

Idealmente, nos gustaría hacer que el comstackdor GWT en sí mismo sea más rápido: un minuto para comstackr una aplicación bastante pequeña está tomando el pelo. Sin embargo, estamos utilizando la comstackción de una manera bastante ingenua, por lo que espero que podamos hacer algunas ganancias rápidas y fáciles.

Actualmente estamos invocando com.google.gwt.dev.Compiler como una aplicación java del objective Ant Ant, con un montón máximo de 256m y mucho espacio de stack. Ant lanza el comstackdor usando fork = true y el último Java 6 JRE, para probar y aprovechar el rendimiento mejorado de Java6. Pasamos nuestra clase de controlador principal al comstackdor junto con el classpath de la aplicación, y desaparece.

¿Qué más podemos hacer para obtener más velocidad? ¿Podemos darle más información para que pase menos tiempo descubriendo qué hacer?

Sé que podemos decir que compile solo para un navegador, pero tenemos que 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 verdad incómoda: el rendimiento del comstackdor GWT es realmente lamentable. Puede usar algunos hacks aquí y allá, pero no obtendrá un rendimiento significativamente mejor.

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

  

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

  

Esto, por ejemplo, comstackrá su aplicación solo para IE y FF. Si sabes que estás usando solo un navegador específico para probar, puedes usar este pequeño truco.

Otra opción: si está utilizando varias configuraciones regionales y vuelve a usar solo una para probar, puede comentarlas todas para que GWT use la configuración regional predeterminada, esto reduce algunos gastos generales adicionales desde el tiempo de comstackción.

En pocas palabras: no va a obtener un aumento de orden de magnitud en el rendimiento del comstackdor, pero tomando varias relajaciones, puede reducir algunos minutos aquí y allá.

Si ejecuta el comstackdor GWT con el indicador -localWorkers, el comstackdor comstackrá permutaciones múltiples en paralelo. Esto le permite usar todos los núcleos de una máquina multi-core, por ejemplo -localWorkers 2 le dirá al comstackdor que compile dos permutaciones en paralelo. No obtendrá diferencias de orden de magnitudes (no todo en el comstackdor es paralelizable) pero sigue siendo una aceleración notable si está comstackndo permutaciones múltiples.

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

Aunque esta entrada es bastante antigua y la mayoría de ustedes probablemente ya lo sepa, creo que vale la pena mencionar que GWT 2.x incluye una nueva bandera de comstackción que acelera las comstackciones omitiendo las optimizaciones. Definitivamente no deberías implementar JavaScript comstackdo de esa manera, pero puede ahorrar tiempo durante las comstackciones continuas que no son de producción.

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

En las versiones más nuevas de GWT (comenzando 2.3 o 2.4, creo), también puedes agregar

  

a su gwt.xml para fines de desarrollo. Eso le dirá al comstackdor de GWT que cree una sola permutación que cubra todas las configuraciones regionales y navegadores. Por lo tanto, aún puede realizar pruebas en todos los navegadores e idiomas, pero solo está comstackndo una sola permutación.

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

(Agregando esto aquí porque sigo terminando aquí cuando busco lo que debo configurar para que solo produzca una permutación para cromo. La respuesta es: )

Puede agregar una opción a su comstackción para producción:

-localWorkers 8 – Donde 8 es el número de subprocesos concurrentes que calculan las 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 comstackción de GWT (gracias al comentario de Dennis Ich).

Si está comstackndo en el entorno de prueba, también puede usar:

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

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

Otra cosa que más que duplicó el rendimiento de la comstackción y el modo alojado fue el uso de un disco SSD (ahora el modo alojado funciona como un amuleto). 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!

El comstackdor de GWT está haciendo un montón 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 GWT está haciendo y por qué tarda tanto tiempo.

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

Puede acelerar la comstackción de GWT, pero solo comstackndo para algunos navegadores, en lugar de 5 tipos que GWT realiza de forma predeterminada. Si desea utilizar el modo hospedado, asegúrese de comstackr para al menos dos navegadores; Si comstack para un solo navegador, el código de detección del navegador se optimiza y el Modo Hosted ya no funciona.

Una manera fácil de configurar la comstackción para menos buscadores es crear un segundo módulo que herede de su módulo principal:

       

Si el atributo rename-to se establece igual, los archivos de salida serán los mismos que si hiciera una comstackción completa

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

Controlar las permutaciones de la comstackción será útil; por favor, revise los siguientes enlaces que explican lo mismo en detalle:

Controlando la Explosión de Permutación: ConditionalProperties

Controlando la Explosión de Permutación: SoftPermutations

Para GWT 2.x acabo de descubrir que si usa

   

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