<?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/"
	>

<channel>
	<title>Blog de diseño web y diseño grafico &#187; javascript</title>
	<atom:link href="http://www.mydesign.com.es/blog/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mydesign.com.es/blog</link>
	<description>herramientas, recursos y codigo para la web</description>
	<lastBuildDate>Mon, 15 Feb 2010 14:54:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gestión de eventos vs Delegación de eventos</title>
		<link>http://www.mydesign.com.es/blog/gestion-de-eventos-vs-delegacion-de-eventos/</link>
		<comments>http://www.mydesign.com.es/blog/gestion-de-eventos-vs-delegacion-de-eventos/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 17:52:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://www.mydesign.com.es/blog/?p=167</guid>
		<description><![CDATA[Como siempre, nos encontramos en el blog de anieto2k.com articulos que ayudan mucho a la hora de definir usos o funcionalidades para una web
Una de las buenas prácticas de Javascript es el uso de eventos para separar la estructura de la funcionalidad, en ella especificamos la funcionalidad que los elementos indicados deberán ejecutar al ser [...]]]></description>
			<content:encoded><![CDATA[<p>Como siempre, nos encontramos en el blog de anieto2k.com articulos que ayudan mucho a la hora de definir usos o funcionalidades para una web</p>
<p>Una de las buenas prácticas de Javascript es el uso de eventos para separar la estructura de la funcionalidad, en ella especificamos la funcionalidad que los elementos indicados deberán ejecutar al ser accionados.</p>
<p>Este uso de eventos, puede ser tratado de dos formas:</p>
<ul>
<li>Gestión de eventos</li>
<li>Delegación de eventos</li>
</ul>
<p>Ambas ofrecen el mismo resultado, aunque, como veremos una es más óptima que otra a la hora de gestionar grandes cantidades de elementos.</p>
<p><span id="more-167"></span></p>
<p>Para enteder las diferencias entre ellas, mejor ver unos ejemplos y luego los comentamos.</p>
<h3>HTML</h3>
<pre><code>&lt;ul id="nav"&gt;
 &lt;li&gt;&lt;a href="#hola"&gt;Hola&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#hola2"&gt;Hola2&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#hola3"&gt;Hola3&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#hola4"&gt;Hola4&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#hola5"&gt;Hola5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<h3>Gestión de eventos</h3>
<pre><code>&lt;script type="text/javascript"&gt;
   var nav = document.getElementById("nav");
   var as = nav.getElementsByTagName("a");
   for (var x = 0; x &lt; as.length; x++) {
     as[x].onclick = function(){
        alert(this.innerHTML);
     }
   }
&lt;/script&gt;</code></pre>
<p>Como vemos esta técnica se basa en<a href="http://www.anieto2k.com/2006/10/16/gestion-de-eventos-en-javascript/"> asociar un evento a cada link</a> del listado <code>#nav</code>. Esto nos hace tener que recorrer todos los enlaces que encontramos dentro del listado y asociarle el evento.</p>
<h3>Delegación de eventos</h3>
<pre><code>&lt;script type="text/javascript"&gt;
   var nav = document.getElementById("nav");
   nav.onclick = function(e){
      var e = e || window.event; // Obtenemos el evento
      var el = e.target || e.srcElement; // Obtenemos el elemento que lanza el evento
      alert(el.innerHTML);
   }
&lt;/script&gt;</code></pre>
<p>Con esta opción delegamos al elemento <code>#nav </code>la tarea de decidir que elemento se está ejecutando y la tarea asociada a ellos. Esto es posible gracias al <a href="http://www.quirksmode.org/js/events_order.html">orden de ejecución de eventos sobre varios elementos</a>.</p>
<h3>Rendimiento</h3>
<p>He hecho una serie de pruebas, sobre este mismo código, añadiendo 300/900 y 5000 elementos.</p>
<p>Tenemos que partir de dos mediciones a tener en cuenta:</p>
<ul>
<li>Tiempo en aplicar los eventos</li>
<li>Tiempo en ejecutar el evento</li>
</ul>
<p>A simple vista ya podemos conocer el resultado, la primera opción se vé penalizada por tener que aplicar a cada elemento del listado la funcionalidad, pero una vez hecho esto, la ejecución rápida y simple, ya que está asociada al elemento.</p>
<p>Por otro lado, la segunda opción es mucho más rápida a la hora de asociar la funcionalidad al elemento ya que siempre, sin importar el número de subelementos haya,  será un único elemento al que asociar. Pero por otro lado nos encontramos con que la ejecución de la funcionalidad debe detectar el elemento y despues la funcionalidad asociada.</p>
<h3>Conclusiones</h3>
<p>Como siempre digo, no es una forma mejor que otra, son diferentes formas que al conocerlas nos permitirá decidir cual es la que más se ajusta a las necesidades de cada proyecto.</p>
<p>Fuente: <a href="http://www.anieto2k.com/2009/11/19/gestion-de-eventos-vs-delegacion-de-eventos/" target="_blank">www.anieto2k.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydesign.com.es/blog/gestion-de-eventos-vs-delegacion-de-eventos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acelarándo la carga de Javascript con eval()</title>
		<link>http://www.mydesign.com.es/blog/acelarando-la-carga-de-javascript-con-eval/</link>
		<comments>http://www.mydesign.com.es/blog/acelarando-la-carga-de-javascript-con-eval/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:15:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.mydesign.com.es/blog/?p=138</guid>
		<description><![CDATA[A traves del blog de anieto2k nos encontramos con este exelente articulo relacionado a mejorar la velocidad de carga de nuestras paginas web usando la funcion eval().
La fuente original es el blog de SproutCore, aunque en el blog de anieto2k encontramos explicado todo en detalle en español. A continuacion podran ver su uso:
El problema
El problema [...]]]></description>
			<content:encoded><![CDATA[<p>A traves del blog de <a href="http://www.anieto2k.com" target="_blank">anieto2k</a> nos encontramos con este exelente articulo relacionado a mejorar la velocidad de carga de nuestras paginas web usando la funcion eval().</p>
<p>La fuente original es el <a href="http://blog.sproutcore.com/">blog de SproutCore</a>, aunque en el blog de <a href="http://www.anieto2k.com/2009/10/28/acelarando-la-carga-con-eval/" target="_blank">anieto2k</a> encontramos explicado todo en detalle en español. A continuacion podran ver su uso:</p>
<h3>El problema</h3>
<p>El problema radica en que las aplicaciones muy ricas en Javascript suelen ser muy pesadas para el procesador y el navegador, despues de descargar el JS, parsear el script lo ha de evaluar (internamente) para poner a nuestra disposición todas las funcionalidades que hayamos desarrollado, en este último punto es donde más se penaliza la ejecución de JS (<strong>hasta un 80% del tiempo de carga total</strong>).</p>
<h3>La propuesta</h3>
<p>Para solventar el problema, nos propone cargar el Javascript de una forma diferente, en lugar de código usar comentarios. Osea, hacer que todo el código Javascript sea un gran comentario.</p>
<pre><code>/*
function mifuncion(){
....
}

var lala = mifuncion();
lala.prototype.bla = function(){
 ...
}

....
*/
<span id="more-138"></span></code></pre>
<h3>Explicación</h3>
<p>Al tratarse de un comentario el navegador no lo evalua y nos ahorramos un tiempo de carga muy valioso y podemos hacer que la carga del código sea cosa nuestra haciendo uso únicamente de él cuando lo necesitemos. Esto nos permite tener un control sobre el Javascript que está ejecutado en todo momento.</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data-20091027-145104.png"><img src="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data-20091027-145104.png" alt="quick_test_data-20091027-145104" /></a><br />
<a href="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data-20091027-145104.png"><small>(Ver Imagen)</small></a></p>
<p>Como vemos en el gráfico, la evaluación de comentarios es ligeramente menor a la de una cadena de texto y muy menor a la de funciones.</p>
<p>En dispositivos móviles este tiempo parece más significativo como podemos ver en la imagen siguiente:</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data_-_iphone-20091027-142630.png"><img src="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data_-_iphone-20091027-142630.png" alt="quick_test_data_-_iphone-20091027-142630" /></a><br />
<a href="http://www.anieto2k.com/wp-content/uploads/2009/10/quick_test_data_-_iphone-20091027-142630.png"><small>(Ver Imagen)</small></a></p>
<h3>Implementándolo</h3>
<pre><code>&lt;html&gt;
[...]
<strong>&lt;!-- Javascript que será ejecutado posteriormente --&gt;
</strong>&lt;script id="lazy"&gt;
/*
Código Javascript
*/
&lt;/script&gt;
[...]
&lt;script&gt;
<strong> // Función encargada de recoger el contenido del &lt;script id="lazy" /&gt; y evaluarlo
</strong> function lazyLoad() {
 var lazyElement = document.getElementById('lazy');
 var lazyElementBody = lazyElement.innerHTML;
 var jsCode = lazyElementBody.replace(/(\/\*|\*\/)/g,''); <strong>// Eliminamos (/*|*/)</strong>
 eval(jsCode);
 }
&lt;/script&gt;
[...]
<strong>&lt;!-- Activamos la carga del JS al hacer click--&gt;
</strong>&lt;div onclick=lazyLoad()&gt; Lazy Load &lt;/div&gt;
&lt;/html&gt;</code></pre>
<p>Como vemos en el código, el sistema básicamente lo que hace es cargar el javascript como un tag con un el código Javascript comentado completamente por lo que el navegador lo omitirá en el momento de evaluarlo.</p>
<p><code>lazyLoad()</code> se encarga de coger el <code>innerHTML </code>del elemento que hemos cargado previamente con el javascript comentado, elimina los carácteres que indica que sea un comentario (en el ejemplo elminará todos los carácteres <code>/*</code> y <code>*/ </code>del innerHTML, por que hay que usarlo con cabeza) y posteriormente lo evalua con <code>eval()</code>.</p>
<h3>Resultado</h3>
<p>La ventaja de este sistema es que nos permite ejecutar ese código cuando queremos y no cuando está cargando la página, mayor control y sobretodo mayor velocidad global de la aplicación.</p>
<p>En los ejemplo de <em>SproutCore </em>obtienen <strong>una mejoría de entre 3x y 20x</strong> frente a la versión de carga secuencial de Javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydesign.com.es/blog/acelarando-la-carga-de-javascript-con-eval/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

