29.7.08

Como reducir el tiempo de compilacion en Flex usando fcsh bajo linux

Hace muy poco comenze a ver Flex como una manera de agregar algunos chiches a Webs usando linux. Empece a hacer unos experimentos en mi maquina, luego lo pase a un servidor chico (Pentium 4 de 1.6GHz) que usamos para desarrollar y los tiempos de compilacion se fueron de 8 a 20 segundos.

Hoy estuve probando fcsh para achicar los tiempos de compilacion y funciona. Evitando cargar la JVM cada vez que compilamos y guardando informacion que le es util en memoria fsch nos ahorra preciado tiempo a hora de compilar desde la terminal. Despues de decir un par de "que bueno!" con bastante emocion, paso directamente a hacer una prueba y poner los resultados a continuacion.

Creamos un archivo mxml con un reducidisimo "Hola Mundo!" en nuestro directorio "bin" de Flex. Vamos a ponerle testfcsh.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="300">
<mx:Panel title="Mi prueba">
<mx:Label text="Hooooooooooooooooooooooola!"/>
</mx:Panel>
</mx:Application>

Ahora lo compilamos usando "mxmlc" con la opcion '-benchmark', mi copia de Flex esta en mi home dentro de los directorios ~/dev/flex/ y, tanto el compilador como fcsh, se encuentran en el directorio 'bin' dentro del de Flex:
caco@square05 ~/dev/flex/bin $ ./mxmlc -benchmark=true testfcsh.mxml 
Loading configuration file /home/caco/dev/flex/frameworks/flex-config.xml
Initial setup: 327ms
Loaded 8 SWCs: 838ms
Files: 327 Time: 3893ms
Linking... 107ms
Optimizing... 409ms
SWF Encoding... 81ms
/home/caco/dev/flex/bin/testfcsh.swf (158538 bytes)
Total time: 5679ms
Peak memory usage: 52 MB (Heap: 28, Non-Heap: 24)

Vemos que en total tardo 5.6 segundos, ahora probemos con fcsh. Primero ejecutamos fcsh:
caco@square05 ~/dev/flex/bin $ ./fcsh                
Adobe Flex Compiler SHell (fcsh)
Version 3.0.0 build 477
Copyright (c) 2004-2007 Adobe Systems, Inc. All rights reserved.

(fcsh)

En el prompt (fcsh) vamos a escribir el mismo comando que usamos para compilar con el mxmlc:

(fcsh) mxmlc -benchmark=true testfcsh.mxml
fcsh: Assigned 1 as the compile target id
Loading configuration file /home/caco/dev/flex/frameworks/flex-config.xml
Initial setup: 324ms
Loaded 8 SWCs: 788ms
Files: 327 Time: 3649ms
Linking... 57ms
Optimizing... 399ms
SWF Encoding... 97ms
/home/caco/dev/flex/bin/testfcsh.swf (158537 bytes)
Total time: 5324ms
Peak memory usage: 54 MB (Heap: 30, Non-Heap: 24)

El tiempo de compilacion es casi igual pero ahora, cada vez que recompilemos, vamos a estar haciendo uso recursos que ya estan en memoria y veremos como acortan los tiempos de compilacion. Para compilar nuevamente la misma aplicacion podemos enviarle a fsch el comando "compile" utilizando el id "1" que se le asigno a nuestro testfcsh.mxml cuando enviamos el primer comando. Voy a cambiar el string "Hooooooola mundo!" que uso en el ejemplo (fcsh detecta si no cambio ningun archivo, y nosotros queremos recompilarlo) y compilamos:

(fcsh) compile 1
Loading configuration file /home/caco/dev/flex/frameworks/flex-config.xml
Initial setup: 12ms
Loaded 8 SWCs: 17ms
Recompile: /home/caco/dev/flex/bin/testfcsh.mxml
Reason: The source file or one of the included files has been updated.
Files changed: 1 Files affected: 0
Files: 327 Time: 423ms
Total time: 453ms
Peak memory usage: 58 MB (Heap: 34, Non-Heap: 24)
Linking... 12ms
Optimizing... 171ms
SWF Encoding... 64ms
/home/caco/dev/flex/bin/testfcsh.swf (158546 bytes)
Total time: 250ms
Peak memory usage: 52 MB (Heap: 28, Non-Heap: 24)

Lo hizo en menos de un segundo, unas siete veces mas rapido que con el primer metodo! Estas pruebas las hice en un Pentium 4 HT de 2.80GHz, hago a pedido las mismas pruebas en una maquina mas lenta pero no ahora.

Tener abierta la terminal fcsh me esta consumiendo aproximadamente 65MB de memoria. Cabe aclarar, tambien, que quienes usan Flex Builder ya hacen uso de fcsh. En caso de no tener el fcsh, pueden bajarlo de la pagina de Adobe y para mas informacion visiten la documentacion de fcsh.

No hay comentarios.: