Un archivo javascript plano que viaja por la net puede ocupar hasta el 80% mas que uno comprimido. Eso significa que el usuario esperara 80% mas para terminar de bajar el archivo mas si ese archivo luego se ve involucrado en alguna ejecucion en el onload event.

Hay varias tecnicas para hacer shrinking de archivos. Aca voy a mostrar la de Yahoo que es la que a mi particularmente me ha dado mas resultados y he podido integrar a mis deployers.

Una de las reglas de oro de optimizacion es Minimizar Los HTTP Requests (sea imagenes, js, css, etc). Para esto hay varias tecnicas como los Images Sprites donde se combinan multiples imagenes en una sola.

Con Javascript pasa algo similar. Consideremos que tenemos una bateria de archivos javascript. Nuestro objetivo es concatenar todos los archivos en uno solo y luego comprimirlo.

Para concatenar todos los archivos en uno simplemente podemos hacerlo a mano o usando este ANT TASK.

<target name="concatenate-js">
	<concat destfile="allfiles.js" fixlastline="yes">
		<filelist>
			<file name="/scripts/albatro.js" />
			<file name="/scripts/data/request.js" />
			<file name="/scripts/ui/ui.js" />
			<file name="/scripts/ui/table/table.js" />
			<file name="/scripts/ui/editor/htmleditor.js" />
			<file name="/scripts/ui/imgslider/slider.js" />
			<file name="/scripts/ui/widget/widget.js" />
			<file name="/scripts/util/validation.js" />
			<file name="/scripts/util/events.js" />
		</filelist>
	</concat>
</target>

El resultado de esta operacion es entonces un solo archivo que contiene todos los scripts de los archivos involucrados.

Ahora vamos a usar YUICompressor, una herramienta Java de Yahoo para minimizar el Javascript de manera sumamente efectiva sin riesgos de integridad para el codigo. La herramienta la pueden encontrar en este website y la documentacion completa en el sitio oficial de yahoo.

Basicamente para ejecutar la compresion tenemos que usar la linea de comando de esta manera.

java -jar yuicompressor-2.4.1.jar allfiles.js -o compressed.js

O si quieren automatizarlo aca esta el ANT TASK que hice para tal fin.

<target name="compress-js">
	<exec executable="java">
		<arg value="-jar" />
		<arg value="/home/tools/yuicompressor-2.4.1.jar" />
		<arg value="-o" />
		<arg value="compressed.js" />
		<arg value="allfiles.js" />
	</exec>
</target>

Aca les dejo un link que habla de performance y es la biblia para mi. Performance Group de Yahoo. Espero les sirva.