<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog de Antonio Manuel Muñiz &#187; Javascript</title>
	<atom:link href="http://amunizmartin.wordpress.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://amunizmartin.wordpress.com</link>
	<description>Desarrollo, Ingeniería y Calidad del Software</description>
	<lastBuildDate>Mon, 30 Nov 2009 19:27:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='amunizmartin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3f7b8b4861abbf6680395419293e44a6?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Blog de Antonio Manuel Muñiz &#187; Javascript</title>
		<link>http://amunizmartin.wordpress.com</link>
	</image>
			<item>
		<title>Javascript como un módulo Maven</title>
		<link>http://amunizmartin.wordpress.com/2009/01/16/javascript-como-un-modulo-maven/</link>
		<comments>http://amunizmartin.wordpress.com/2009/01/16/javascript-como-un-modulo-maven/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 23:29:00 +0000</pubDate>
		<dc:creator>Antonio Manuel Muñiz Martín</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Maven Plugins]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://amunizmartin.wordpress.com/?p=175</guid>
		<description><![CDATA[¿Es posible aislar todo el código javascript de nuestra aplicación web en un proyecto a parte?
Si, lo es. Con javascript-maven-tools, en concreto con javascript-maven-plugin. Este plugin nos permite tratar con proyectos de tipo javascript, es decir, esto sería válido:
...
&#60;dependencies&#62;
    ...
    &#60;dependency&#62;
        &#60;gruopId&#62;example.javascript&#60;/groupId&#62;
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=175&subd=amunizmartin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>¿Es posible aislar todo el código javascript de nuestra aplicación web en un proyecto a parte?</strong></p>
<p>Si, lo es. Con <a href="http://mojo.codehaus.org/javascript-maven-tools/" target="_blank">javascript-maven-tools</a>, en concreto con <a href="http://mojo.codehaus.org/javascript-maven-tools/javascript-maven-plugin/index.html" target="_blank">javascript-maven-plugin</a>. Este plugin nos permite tratar con proyectos de tipo javascript, es decir, esto sería válido:</p>
<pre>...
&lt;dependencies&gt;
    ...
    &lt;dependency&gt;
        &lt;gruopId&gt;example.javascript&lt;/groupId&gt;
        &lt;artifactId&gt;my-javascript&lt;/artifactId&gt;
        &lt;version&gt;1.0.0&lt;/version&gt;
        &lt;type&gt;javascript&lt;/type&gt;
    &lt;/dependency&gt;
    ...
&lt;/dependencies&gt;
...</pre>
<p>Este plugin habilita el uso del tipo &#8220;javascript&#8221; en nuestras dependencias. Sólo debemos configurarlo:</p>
<pre>&lt;build&gt;
    &lt;plugin&gt;
        &lt;groupId&gt;org.codehaus.mojo.javascript&lt;/groupId&gt;
        &lt;artifactId&gt;javascript-maven-plugin&lt;/artifactId&gt;
        &lt;version&gt;1.0-alpha-1-SNAPSHOT&lt;/version&gt;
        &lt;extensions&gt;true&lt;/extensions&gt;
        &lt;executions&gt;
            &lt;execution&gt;
                &lt;id&gt;js-copy-deps&lt;/id&gt;
                &lt;goals&gt;
                    &lt;goal&gt;war-package&lt;/goal&gt;
                &lt;/goals&gt;
                &lt;phase&gt;package&lt;/phase&gt;
            &lt;/execution&gt;
        &lt;/executions&gt;
    &lt;/plugin&gt;
&lt;/build&gt;</pre>
<p><strong>¿Y el artefacto javascript, cómo se crea?</strong></p>
<p>Pues definiendo un proyecto maven de tipo &#8220;javascript&#8221;. Es decir, el &#8220;packaging&#8221; será de tipo &#8220;javascript&#8221; en el POM:</p>
<pre><span class="nt">&lt;packaging&gt;</span>javascript<span class="nt">&lt;/packaging&gt;
</span></pre>
<p><span class="nt">Y definiremos la siguiente extensión:</span></p>
<pre><span class="nt">...
&lt;build&gt;
    &lt;extensions&gt;
        &lt;extension&gt;
            &lt;groupId&gt;org.codehaus.mojo.javascript&lt;/groupId&gt;
            &lt;artifactId&gt;javascript-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;1.0-alpha-1-SNAPSHOT&lt;/version&gt;
         &lt;/extension&gt;
    &lt;/extensions&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.codehaus.mojo.javascript&lt;/groupId&gt;
            &lt;artifactId&gt;javascript-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;1.0-alpha-1-SNAPSHOT&lt;/version&gt;
            &lt;extensions&gt;true&lt;/extensions&gt;
         &lt;/plugin&gt;
     &lt;/plugins&gt;
&lt;/build&gt;
...
</span></pre>
<p><span class="nt">Maven tratará nuestro proyecto como un projecto más, y tenemos a nuestra disposición toda la potencia de la gestión de dependencias de Maven.</span></p>
<p><span class="nt">Para configurar el comportamiento del plugin debemos indicarle un proporcionar un par de parámetros, basta con incluir las propiedades en el POM:</span></p>
<pre><span class="nt">&lt;properties&gt;
    &lt;scripts&gt;public/scripts&lt;/scripts&gt;
    &lt;lib&gt;&lt;/lib&gt;
    &lt;useArtifactId&gt;true&lt;/useArtifactId&gt;
&lt;/properties&gt;</span></pre>
<p><span class="nt">Eso es todo. Solo un detalle más, el plugin tiene algunos bugs, he reportado un <a href="http://jira.codehaus.org/browse/MOJO-1288" target="_blank">parche</a> a sus desarrolladores, aún no lo han incluido en la versión actual. Siempre podemos <a href="http://svn.codehaus.org/mojo/trunk/sandbox/javascript-maven-tools/javascript-maven-plugin" target="_blank">descargar el código</a> y <a href="http://www.eclipse.org/subversive/documentation/teamSupport/SVNaction/patch.php" target="_blank">parchearlo</a> nosotros mismos ;)<br />
</span></p>
Posted in Herramientas, Maven Plugins Tagged: Javascript, Maven <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amunizmartin.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amunizmartin.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amunizmartin.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amunizmartin.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amunizmartin.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amunizmartin.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amunizmartin.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amunizmartin.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amunizmartin.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amunizmartin.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=175&subd=amunizmartin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://amunizmartin.wordpress.com/2009/01/16/javascript-como-un-modulo-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d30bd2fcdb387d2f82405c2a65298937?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Antonio Manuel Muñiz Martín</media:title>
		</media:content>
	</item>
		<item>
		<title>Minimizando el tiempo de carga: Maven YUI Compressor</title>
		<link>http://amunizmartin.wordpress.com/2008/09/24/maven-yui-compressor-minimizando-el-tiempo-de-carga/</link>
		<comments>http://amunizmartin.wordpress.com/2008/09/24/maven-yui-compressor-minimizando-el-tiempo-de-carga/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 23:13:57 +0000</pubDate>
		<dc:creator>Antonio Manuel Muñiz Martín</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://amunizmartin.wordpress.com/?p=75</guid>
		<description><![CDATA[Cuando se usan frameworks Javascript, como ExtJS o YUI, en la capa de presentación de una aplicación web nuestro navegador debe descargar todo el Javascript antes de poder mostrar nada. Esto se traduce en un tiempo de espera, por parte del usuario, en ocasiones demasiado largo. Una medida, como otras muchas, de calidad del software, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=75&subd=amunizmartin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Cuando se usan frameworks Javascript, como ExtJS o YUI, en la capa de presentación de una aplicación web nuestro navegador debe descargar todo el Javascript antes de poder mostrar nada. Esto se traduce en un tiempo de espera, por parte del usuario, en ocasiones demasiado largo. Una medida, como otras muchas, de calidad del software, es la satisfacción del usuario final en cuanto a rendimiento de la aplicación, y por tanto debe ser tenida en cuenta durante el proceso de SQA.</p>
<p>Una solución a este problema es la aplicación conjunta de dos métodos: compresión/ofuscado (minify) y uso de un solo fichero que contiene todo el Javascript. De esta forma el navegador sólo debe hacer una llamada para descargar un fichero comprimido, y no decenas de llamadas para descargar cada pequeño fichero Javascript (sin comprimir).</p>
<p>Este proceso puede hacerse a mano, usando herramientas como YUI Compressor, o automatizarlo durante el ciclo de vida de nuestro proyecto Maven. El plugin <a title="Maven YUI Compressor" href="http://alchim.sourceforge.net/yuicompressor-maven-plugin/index.html" target="_blank">Maven YUI Compressor</a> hace uso de la herramienta citada anteriormente para integrar este proceso durante el empaquetado de la aplicación web.</p>
<p>La configuración que requiere el plugin en el pom es la siguiente:</p>
<pre>&lt;plugins&gt;
    &lt;plugin&gt;
        &lt;groupId&gt;net.sf.alchim&lt;/groupId&gt;
        &lt;artifactId&gt;yuicompressor-maven-plugin&lt;/artifactId&gt;
        &lt;version&gt;0.7.1&lt;/version&gt;
        &lt;executions&gt;
            &lt;execution&gt;
                &lt;goals&gt;
                    &lt;goal&gt;compress&lt;/goal&gt;
                &lt;/goals&gt;
                &lt;phase&gt;generate-sources&lt;/phase&gt;
            &lt;/execution&gt;
        &lt;/executions&gt;
        &lt;configuration&gt;
            &lt;nosuffix&gt;false&lt;/nosuffix&gt;
            &lt;jswarn&gt;false&lt;/jswarn&gt;
            &lt;preserveStringLiterals&gt;true&lt;/preserveStringLiterals&gt;
            &lt;preserveAllSemiColons&gt;true&lt;/preserveAllSemiColons&gt;
            &lt;nomunge&gt;true&lt;/nomunge&gt;
            &lt;failOnWarning&gt;false&lt;/failOnWarning&gt;
            &lt;sourceDirectory&gt;${basedir}/src/main/webapp/public&lt;/sourceDirectory&gt;
            &lt;outputDirectory&gt;${project.build.directory}/compressed/public&lt;/outputDirectory&gt;
            &lt;aggregations&gt;
                &lt;aggregation&gt;
                    &lt;includes&gt;
                        &lt;include&gt;**/*-min.js&lt;/include&gt;
                    &lt;/includes&gt;
                    &lt;output&gt;
${project.build.directory}/${project.artifactId}-${project.version}/public/scripts/todo-el-javascript.js
                    &lt;/output&gt;
                &lt;/aggregation&gt;
            &lt;/aggregations&gt;
        &lt;/configuration&gt;
    &lt;/plugin&gt;
&lt;/plugins&gt;</pre>
<p>Esta configuración realizará las siguientes tareas:</p>
<ol>
<li>Comprimir/ofuscar (minify) cada fichero Javascript generando un fichero <em>[nombre_original]-min.js</em></li>
<li>Colocar el código comprimido en <em>target/compressed/public</em></li>
<li>Unir todos los ficheros ofuscados (<em>*-min.js</em>) en uno: <em>todo-el-javascript.js</em></li>
<li>Colocarlo en<em> target/[artifact]-[version]/public/scripts</em></li>
</ol>
<p>En el proyecto que he usado como ejemplo se ha conseguido reducir en un 40% el tamaño total en bytes del código Javascript que el navegador debe descargar, a esto hay que sumarle la ganacia en tiempo que se produce al descargar un solo fichero con una sola petición.</p>
<p>Este plugin además ofrece otra funcionalidad, el análisis estático del código usando <a title="jslint" href="http://www.jslint.com/" target="_blank">Jslint</a>, pero esto será tratado en otra entrada futura ;)</p>
Posted in Herramientas, Software Quality Tagged: Javascript, Software Quality <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amunizmartin.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amunizmartin.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amunizmartin.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amunizmartin.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amunizmartin.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amunizmartin.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amunizmartin.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amunizmartin.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amunizmartin.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amunizmartin.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=75&subd=amunizmartin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://amunizmartin.wordpress.com/2008/09/24/maven-yui-compressor-minimizando-el-tiempo-de-carga/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d30bd2fcdb387d2f82405c2a65298937?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Antonio Manuel Muñiz Martín</media:title>
		</media:content>
	</item>
	</channel>
</rss>