<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comentarios en: Rendimiento extremo de Javascript</title>
	<atom:link href="http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/</link>
	<description>Desarrollo web, Wordpress, y alguna cosilla más</description>
	<lastBuildDate>Sun, 12 Feb 2012 12:01:25 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Por: aNieto2k</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61277</link>
		<dc:creator>aNieto2k</dc:creator>
		<pubDate>Fri, 13 Nov 2009 09:48:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61277</guid>
		<description>&lt;a href=&quot;#comment-61272&quot; title=&quot;Responder a maeghith&quot; rel=&quot;nofollow&quot;&gt;@maeghith&lt;/a&gt;: Muchas gracias por la aclaración, la verdad es que queda mucho más claro que lo que he puesto arriba.:D</description>
		<content:encoded><![CDATA[<p><a href="#comment-61272" title="Responder a maeghith" rel="nofollow">@maeghith</a>: Muchas gracias por la aclaración, la verdad es que queda mucho más claro que lo que he puesto arriba.:D</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: maeghith</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61272</link>
		<dc:creator>maeghith</dc:creator>
		<pubDate>Fri, 13 Nov 2009 01:57:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61272</guid>
		<description>Tal y como lo escribes parece que de igual usar &#039;&lt;code&gt;&amp;&amp;&lt;/code&gt;&#039; que &#039;&lt;code&gt;&#124;&#124;&lt;/code&gt;&#039;, cuando depende de la lógica del programa que vayas a usar uno u otro.

Tu has mostrado cómo se dispara la evaluación perezosa (EP, lazy evaluation) en &#039;&lt;code&gt;&amp;&amp;&lt;/code&gt;&#039; y cómo no se dispara con &#039;&lt;code&gt;&#124;&#124;&lt;/code&gt;&#039;, pero el caso es que tanto el &#039;&lt;code&gt;&amp;&amp;&lt;/code&gt;&#039; como el &#039;&lt;code&gt;&#124;&#124;&lt;/code&gt;&#039; hacen EP, sólo que en casos distintos. Te pongo los contraejemplos:


&lt;pre&gt;&lt;code&gt;// disparar EP con &amp;&amp;
n=1;
if (false &amp;&amp; (n=2))…;
// n=1

// no disparar EP con &#124;&#124;
n=1;
if (false &#124;&#124; (n=2))…;
// n=2
&lt;/code&gt;&lt;/pre&gt;

Racionalización: cada operador tiene su lógica (por eso son operadores lógicos :p):
- en el caso de &#039;&lt;code&gt;&amp;&amp;&lt;/code&gt;&#039;: todas las condiciones deben ser ciertas, con lo que se detendrá en la primera que sea falsa, y continuará evaluando mientras lo que encuentre sea cierto;
- en el caso de &#039;&lt;code&gt;&#124;&#124;&lt;/code&gt;&#039;: con que haya al menos 1 caso que sea cierto le vale, con lo que se detendrá precisamente en el primero que encuentre que sea cierto, y continuará evaluando mientras lo que encuentre sea falso.

El truco para aprovecharse de esto sería cuando tienes varias (o muy costosas) condiciones en los paréntesis del &#039;&lt;code&gt;if&lt;/code&gt;&#039;, dependiendo de si lo que te interesa es &#039;&lt;code&gt;&amp;&amp;&lt;/code&gt;&#039; u &#039;&lt;code&gt;&#124;&#124;&lt;/code&gt;&#039; buscar la que sea más probable o rápida de que evalúe al valor que dispara la EP para cada caso y poner ese el primero. Por ejemplo si en el &#039;&lt;code&gt;if&lt;/code&gt;&#039; llamas una función que tiene algún bucle dentro, pues eso que te ahorras.</description>
		<content:encoded><![CDATA[<p>Tal y como lo escribes parece que de igual usar &#8216;<code>&amp;&amp;</code>&#8216; que &#8216;<code>||</code>&#8216;, cuando depende de la lógica del programa que vayas a usar uno u otro.</p>
<p>Tu has mostrado cómo se dispara la evaluación perezosa (EP, lazy evaluation) en &#8216;<code>&amp;&amp;</code>&#8216; y cómo no se dispara con &#8216;<code>||</code>&#8216;, pero el caso es que tanto el &#8216;<code>&amp;&amp;</code>&#8216; como el &#8216;<code>||</code>&#8216; hacen EP, sólo que en casos distintos. Te pongo los contraejemplos:</p>
<pre><code>// disparar EP con &amp;&amp;
n=1;
if (false &amp;&amp; (n=2))…;
// n=1

// no disparar EP con ||
n=1;
if (false || (n=2))…;
// n=2
</code></pre>
<p>Racionalización: cada operador tiene su lógica (por eso son operadores lógicos :p):<br />
- en el caso de &#8216;<code>&amp;&amp;</code>&#8216;: todas las condiciones deben ser ciertas, con lo que se detendrá en la primera que sea falsa, y continuará evaluando mientras lo que encuentre sea cierto;<br />
- en el caso de &#8216;<code>||</code>&#8216;: con que haya al menos 1 caso que sea cierto le vale, con lo que se detendrá precisamente en el primero que encuentre que sea cierto, y continuará evaluando mientras lo que encuentre sea falso.</p>
<p>El truco para aprovecharse de esto sería cuando tienes varias (o muy costosas) condiciones en los paréntesis del &#8216;<code>if</code>&#8216;, dependiendo de si lo que te interesa es &#8216;<code>&amp;&amp;</code>&#8216; u &#8216;<code>||</code>&#8216; buscar la que sea más probable o rápida de que evalúe al valor que dispara la EP para cada caso y poner ese el primero. Por ejemplo si en el &#8216;<code>if</code>&#8216; llamas una función que tiene algún bucle dentro, pues eso que te ahorras.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: chmp</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61243</link>
		<dc:creator>chmp</dc:creator>
		<pubDate>Wed, 11 Nov 2009 17:08:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61243</guid>
		<description>&lt;a href=&quot;#comment-61208&quot; title=&quot;Responder a aNieto2k&quot; rel=&quot;nofollow&quot;&gt;@aNieto2k&lt;/a&gt;: Son operadores distintos.  
Si el primer parámetro es un false, el comportamiento va a ser mejor para el or.</description>
		<content:encoded><![CDATA[<p><a href="#comment-61208" title="Responder a aNieto2k" rel="nofollow">@aNieto2k</a>: Son operadores distintos.<br />
Si el primer parámetro es un false, el comportamiento va a ser mejor para el or.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: aNieto2k</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61208</link>
		<dc:creator>aNieto2k</dc:creator>
		<pubDate>Tue, 10 Nov 2009 17:19:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61208</guid>
		<description>&lt;a  href=&quot;#comment-61206&quot; title=&quot;Responder a Martin&quot; rel=&quot;nofollow&quot;&gt;@Martin&lt;/a&gt;: Exacto, esa era la diferencia. 

Por experiencia te puedo asegurar que nunca está de más :D</description>
		<content:encoded><![CDATA[<p><a href="#comment-61206" title="Responder a Martin" rel="nofollow">@Martin</a>: Exacto, esa era la diferencia. </p>
<p>Por experiencia te puedo asegurar que nunca está de más <img src='http://www.anieto2k.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Martin</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61206</link>
		<dc:creator>Martin</dc:creator>
		<pubDate>Tue, 10 Nov 2009 16:33:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61206</guid>
		<description>Interesante lo de cachear las variables globales. Yo llamaba siempre a window. directamente.
Lo que si, imagino que si la cacheas estas consumiendo mas memoria.

Lo de &quot;Diferencia entre &amp;&amp; y &#124;&#124;&quot; nose a que quiere llegar, a que &#124;&#124; es mas rapido porque hace una sola condicion? Si es eso ni hacia falta aclararlo.</description>
		<content:encoded><![CDATA[<p>Interesante lo de cachear las variables globales. Yo llamaba siempre a window. directamente.<br />
Lo que si, imagino que si la cacheas estas consumiendo mas memoria.</p>
<p>Lo de &#8220;Diferencia entre &amp;&amp; y ||&#8221; nose a que quiere llegar, a que || es mas rapido porque hace una sola condicion? Si es eso ni hacia falta aclararlo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Kilian</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61202</link>
		<dc:creator>Kilian</dc:creator>
		<pubDate>Tue, 10 Nov 2009 16:00:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61202</guid>
		<description>O.o Me ha sorprendido el comportamiento del toString en una función, en Firefox. toSource retorna lo mismo, además.</description>
		<content:encoded><![CDATA[<p>O.o Me ha sorprendido el comportamiento del toString en una función, en Firefox. toSource retorna lo mismo, además.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: aNieto2k</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61197</link>
		<dc:creator>aNieto2k</dc:creator>
		<pubDate>Tue, 10 Nov 2009 14:46:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61197</guid>
		<description>&lt;a  href=&quot;#comment-61196&quot; title=&quot;Responder a gonzalo&quot; rel=&quot;nofollow&quot;&gt;@gonzalo&lt;/a&gt;: Gracias por la recomendación. A la cola de libros pendientes :D</description>
		<content:encoded><![CDATA[<p><a href="#comment-61196" title="Responder a gonzalo" rel="nofollow">@gonzalo</a>: Gracias por la recomendación. A la cola de libros pendientes <img src='http://www.anieto2k.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: gonzalo</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61196</link>
		<dc:creator>gonzalo</dc:creator>
		<pubDate>Tue, 10 Nov 2009 14:35:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61196</guid>
		<description>Recomiendo el libro Even Faster Web Sites del amigo Steve Souder. Concretamentente el capítulo &quot;Writing Efficient JavaScript&quot;. Este capítulo lo ha escrito otro ilustre (Nicholas C. Zakas) y trata sobre estas cosas.
Un saludo.</description>
		<content:encoded><![CDATA[<p>Recomiendo el libro Even Faster Web Sites del amigo Steve Souder. Concretamentente el capítulo &#8220;Writing Efficient JavaScript&#8221;. Este capítulo lo ha escrito otro ilustre (Nicholas C. Zakas) y trata sobre estas cosas.<br />
Un saludo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: aNieto2k</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61191</link>
		<dc:creator>aNieto2k</dc:creator>
		<pubDate>Tue, 10 Nov 2009 13:43:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61191</guid>
		<description>&lt;a  href=&quot;#comment-61190&quot; title=&quot;Responder a totoloco&quot; rel=&quot;nofollow&quot;&gt;@totoloco&lt;/a&gt;: Si, claro. Aunque creo que Thomas quería ilustrar esos casos en los que por comodidad hacemos un loop en lugar de hacer la operación directa.

Está claro que evitarnos una comprobación nos permite mejorar el tiempo :D</description>
		<content:encoded><![CDATA[<p><a href="#comment-61190" title="Responder a totoloco" rel="nofollow">@totoloco</a>: Si, claro. Aunque creo que Thomas quería ilustrar esos casos en los que por comodidad hacemos un loop en lugar de hacer la operación directa.</p>
<p>Está claro que evitarnos una comprobación nos permite mejorar el tiempo <img src='http://www.anieto2k.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: totoloco</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comment-61190</link>
		<dc:creator>totoloco</dc:creator>
		<pubDate>Tue, 10 Nov 2009 13:23:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244#comment-61190</guid>
		<description>está muy bueno el resumen, pero hay uno que no me gusta.
comprar un loop con un supuesto loop desenrollado SEGURO es una tontera, funcionalmente son distintos, y los tiempos obvio son otros, no tenés que chequear la condición del loop en ningún momento, en el primer caso lo tenés que hacer tantas veces como cantidad de loops</description>
		<content:encoded><![CDATA[<p>está muy bueno el resumen, pero hay uno que no me gusta.<br />
comprar un loop con un supuesto loop desenrollado SEGURO es una tontera, funcionalmente son distintos, y los tiempos obvio son otros, no tenés que chequear la condición del loop en ningún momento, en el primer caso lo tenés que hacer tantas veces como cantidad de loops</p>
]]></content:encoded>
	</item>
</channel>
</rss>

