Alfonso Marín López

Blog personal de un programador

Parámetros de compilación de GWT

| 3 Comments

Estos días ando un poco liado con el desarrollo de una aplicación en GWT. Que con esta ultima versión, la 2.0, se puede decir que han dado un paso de gigante.
En esta ocasión voy a hablar de su compilador para la puesta en producción y los parámetros que tiene.

Antes de nada explicar un poco como funciona, GWT coge y compila a javascript nuestro codigo creando diferentes versiones en archivos diferentes. Si nos fijamos en lo que genera veremos que hay una serie de archivos con extensiones html, rpc, png. Los png son los bundle, donde mete todas las imágenes de la aplicación en una sola, descargándola de golpe y luego muestra la parte que interese. Los archivos rpc son los encargados de las llamadas a los servicios y los html son donde esta toda la chicha.

Veremos que son del estilos LKH45KH6KLJH4356H3456HLKH45.cache.html, cada archivo represente a un idioma/navegador. Así que si tenemos 2 idiomas y 5 navegadores, tendremos 10 archivos o permutaciones como ellos los llaman.

Cada compilación lleva su tiempo, y en las tareas ant que utilicemos podremos introducir algunos parámetros que agilicen esta compilación.

Si tenemos varios módulos, es interesante que los compilemos en una misma tarea, indicando a cada llamada java que sea un fork, para que se compile en paralelo.

Y hacemos uso de unos de los parámetros mas interesantes, el localworkers, esto representa a un hilo que compila una permutación, así que si ponemos mas, compilaría paralelamente las permutaciones, aquí que cada uno hagas sus pruebas. Yo tengo 4 núcleos y poniéndolo en 4 se me reduce a la mitad el tiempo necesario para compilar.
Os dejo una muestra en ant.

<target name="gwtc" depends="javac" description="GWT compile to JavaScript">
<!-- Compilacion modulo vo -->
<java failonerror="false" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="modules"/>
<path refid="project.class.path"/>
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx256M"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg value="com.orion.apps.cuentas.ValueObject"/>
<arg line="-war ${build.dir}"/>
<arg line="-style DETAILED"/>
<arg line="-localWorkers 4"/>
</java>

<!-- Compilacion modulo cuentas-->
<java failonerror="false" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="view/main/java"/>
<pathelement location="view/main/resources"/>
<pathelement location="rpc/main/java"/>
<pathelement location="modules"/>
<path refid="project.class.path"/>
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx256M"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="-war ${build.dir}"/>
<arg line="-style DETAILED"/>
<arg line="-localWorkers 4"/>
<arg value="com.orion.apps.cuentas.web.CuentasWeb"/>
</java>
</target>

PD: Si se quiere ir mas rápido, se puede eliminar idiomas del archivo de configuración gwt.xml

  • Vale, ahora entiendo la cara que pones cuando yo me pongo a hablar con alguien de temas frikis y no te enteras de que es lo que hablamos :lol:

  • admin

    Tranquilo, a mi me pasa lo mismo.

  • Pingback: Build de GWT con ant | Alfonso Marín López()