Estamos comenzando a hacer un uso más intensivo de GWT en nuestros proyectos, y el rendimiento del compilador de GWT es cada vez más molesto.
Vamos a comenzar a alterar nuestras prácticas de trabajo para mitigar el problema, incluido un mayor énfasis en el navegador en modo alojado, lo que aplaza la necesidad de ejecutar el compilador GWT hasta un momento posterior, pero eso conlleva sus propios riesgos, particularmente el de no detectar problemas con navegadores reales hasta mucho más tarde de lo que quisiéramos.
Idealmente, nos gustaría hacer que el compilador de GWT sea más rápido: un minuto para compilar una aplicación bastante pequeña está tomando el pelo. Sin embargo, estamos usando la compilación de una manera bastante ingenua, así que espero que podamos obtener ganancias rápidas y fáciles.
Actualmente estamos invocando com.google.gwt.dev.Compiler como una aplicación java del objetivo Ant Ant, con un montón máximo de 256m y mucho espacio de pila. Ant compila el compilador utilizando fork = true y el último Java 6 JRE, para intentar aprovechar el rendimiento mejorado de Java6. Pasamos nuestra clase de controlador principal al compilador junto con el classpath de la aplicación, y listo.
¿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 decirle que solo compile para un navegador, pero necesitamos hacer pruebas en varios navegadores, así que eso no es realmente práctico.
Todas las sugerencias son bienvenidas en este momento.
fuente
Si ejecuta el compilador GWT con el indicador -localWorkers, el compilador compilará múltiples permutaciones en paralelo. Esto le permite utilizar todos los núcleos de una máquina multinúcleo, 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 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 se desarrolla con el modo alojado, ya que no es probable que las compilaciones obtengan magnitudes más rápido.
fuente
Aunque esta entrada es bastante antigua y la mayoría de ustedes probablemente ya lo sepan, creo que vale la pena mencionar que GWT 2.x incluye un nuevo indicador de compilación que acelera las compilaciones omitiendo las optimizaciones. Definitivamente no debe implementar JavaScript compilado de esa manera, pero puede ahorrar tiempo durante las compilaciones continuas que no son de producción.
Solo incluya la bandera: -draftCompile a su línea de compilador GWT.
fuente
Aquí hay una lista de valores de user.agent en los que puede establecerlo.
(La adición de este aquí porque sigo terminando aquí cuando la búsqueda de lo que debería establecer para que sea sólo producen una permutación de cromo respuesta es:.
<set-property name="user.agent" value="safari"/>
)fuente
En las versiones más recientes de GWT (a partir de 2.3 o 2.4, creo), también puede agregar
a su gwt.xml para fines de desarrollo. Eso le indicará al compilador GWT que cree una única permutación que cubra todos los entornos locales y navegadores. Por lo tanto, aún puede realizar pruebas en todos los navegadores e idiomas, pero todavía solo compila una sola permutación
fuente
Puede agregar una opción a su compilación para producción:
-localWorkers 8
- Donde 8 es el número de hilos concurrentes que calculan permutaciones. Todo lo que tiene que hacer es ajustar este número al número que sea más conveniente para usted. Vea el rendimiento de la compilación GWT (gracias al comentario de Dennis Ich).Si está compilando para el entorno de prueba, también puede usar:
-draftCompile
que permite compilaciones 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ó el rendimiento de la compilación y el modo alojado fue el uso de un disco SSD (ahora el modo alojado funciona de maravilla). 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!
fuente
El compilador de GWT está haciendo mucho 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 que el desarrollo use el Modo Hospedado tanto como sea posible y luego solo compile cuando quiera hacer sus pruebas. Esto suena como la solución a la que ya has llegado, pero básicamente es por eso que el Modo Hospedado está ahí (bueno, eso y depuración).
Puede acelerar la compilación de GWT, pero solo compila para algunos navegadores, en lugar de los 5 tipos que GWT hace de manera 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 hospedado ya no funciona.
Una manera fácil de configurar la compilación para menos navegadores es crear un segundo módulo que herede de su módulo principal:
Si el
rename-to
atributo se establece igual, los archivos de salida serán los mismos que si hiciera una compilación completafuente
fuente
Para GWT 2.x acabo de descubrir que si usas
Incluso puede especificar más de una permutación.
fuente