<?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>TecnoRetales &#187; Optimización</title>
	<atom:link href="http://www.tecnoretales.com/tag/optimizacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tecnoretales.com</link>
	<description>La experiencia no se olvida</description>
	<lastBuildDate>Mon, 13 Sep 2010 21:37:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- google ad injected by adsense-optimizer http://www.adsenseoptimizer.de -->
			<div  style="padding:7px; float: right; padding-right: 0; margin: 3px;"><!-- Ad number: 1 --><script type="text/javascript"><!--
    	 
    	google_ad_client = "pub-7180773421652966"; google_alternate_color = "FFFFFF";
		google_ad_width = 468; google_ad_height = 60;
		google_ad_format = "468x60_as"; google_ad_type = "text";
		google_ad_channel =""; google_color_border = "FE8B00";
		google_color_link = "FE8B00"; google_color_bg = "FFFFFF";
		google_color_text = "000000"; google_color_url = "D9D9D9";
		google_ui_features = "rc:6"; //--></script>
		<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>	<item>
		<title>Cómo optimizar tus aplicaciones Web</title>
		<link>http://www.tecnoretales.com/programacion/como-optimizar-tus-aplicaciones-php/</link>
		<comments>http://www.tecnoretales.com/programacion/como-optimizar-tus-aplicaciones-php/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 16:57:21 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Optimización]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPBarcelona]]></category>

		<guid isPermaLink="false">http://www.tecnoretales.com/?p=685</guid>
		<description><![CDATA[Manuel Aguilar publicó una magnífica presentación sobre cómo optimizar aplicaciones Web dada en la PHP Barcelona Conference 2008 y he considerado interesante recopilar a modo de resumen las ideas más importantes de ese artículo, en cualquier caso, recomiendo la lectura del mismo para recoger toda su esencia y ampliar información.
Partiendo de un estudio de Yahoo! [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p><a href="http://www.tecnoretales.com/wp-content/uploads/2009/10/internet-speed.jpg"><img class="alignleft size-full wp-image-693" title="Optimizar aplicaciones PHP" src="http://www.tecnoretales.com/wp-content/uploads/2009/10/internet-speed.jpg" alt="Optimizar aplicaciones PHP" width="200" height="200" /></a>Manuel Aguilar publicó una magnífica presentación sobre cómo <strong>optimizar aplicaciones Web</strong> dada en la PHP Barcelona Conference 2008 y he considerado interesante recopilar a modo de resumen las ideas más importantes de ese artículo, en cualquier caso, recomiendo la lectura del mismo para recoger toda su esencia y ampliar información.</p>
<p>Partiendo de un estudio de Yahoo! que dice que el 80% del tiempo de carga de una web corresponde al lado del cliente, podemos seguir una serie de reglas que aumentarán significativamente la percepción de velocidad del usuario.<span id="more-685"></span></p>
<p><strong>1. Aumentar el tiempo de expiración</strong> de los elementos cacheados que no varían como CSS o JavaScript: Para forzar la carga de los mismos cuando haya cambios, podemos añadir el md5 del contenido del fichero como parámetro, así el navegador lo recargará cuando cambie el hash. Ej: style.css?hash=f9d35dcf65d8f67e288ae2f12fc069f7</p>
<p><strong>2. No colocar código JavaScript o estilos inline</strong>: es mejor colocarlos como ficheros externos fácilmente cacheables, de este modo evitaremos descargar todo el html por un cambio de estilo.</p>
<p><strong>3. Reducir el número de ficheros externos</strong>: Los navegadores sólo pueden aceptar dos descargas simultaneas de un mismo dominio, si unimos nuestras librerías JavaScript y nuestros CSS en un único archivo evitaremos dilatar innecesariamente el tiempo de descarga.</p>
<p><a href="http://www.tecnoretales.com/wp-content/uploads/2009/10/firebug.jpg"><img class="aligncenter size-full wp-image-686" title="Firebug Net" src="http://www.tecnoretales.com/wp-content/uploads/2009/10/firebug.jpg" alt="Firebug Net" width="582" height="149" /></a></p>
<p><strong>4. Usar subdominios</strong> diferentes para las imágenes y para los elementos estáticos: Conseguiremos así descargar 8 elementos de manera simultánea y reducir la carga de la web. Si además podemos optimizar un apache aparte para servir las imágenes, conseguiremos un mejor rendimiento al servirlas.</p>
<p><strong>5. Compactar los ficheros JavaScript</strong>: Existen programas gratuitos como <a title="Yui Compressor" href="http://yuilibrary.com/downloads/#yuicompressor" target="_blank">YUI Compressor</a> que comprimen los archivos JavaScript consiguiendo resultados de hasta el 50%.</p>
<p><strong>6. Utilizar compresión en el servidor</strong>: Los servidores modernos como Apache son capaces de comprimir la información antes de servirla, posteriormente los navegadores actuales como Explorer o Firefox la descomprimen de manera transparente al usuario.</p>
<p><strong>7. Fomentar el uso de imágenes con muchos sprites</strong>: Estas son imágenes grandes que contienen muchas imágenes pequeñas. Según lo comentado en el punto 3 tardaremos mucho menos en descargar una imágen con 50 sprites que 50 sprites de manera individual. Posteriormente utilizaremos CSS para definir la sección de imágen que se mostrará.</p>
<p><a href="http://www.tecnoretales.com/wp-content/uploads/2009/10/sprites.jpg"><img class="aligncenter size-full wp-image-687" title="Sprites" src="http://www.tecnoretales.com/wp-content/uploads/2009/10/sprites.jpg" alt="Sprites" width="336" height="153" /></a></p>
<p><strong>8. Mover los CSS al &lt;head&gt;</strong>: Navegadores como Explorer no renderizan la web hasta que no tienen todos los CSS, si los colocas en la cabecera podrá empezar antes a mostrar la web.</p>
<p><strong>9. Mover los JavaScript al final de la página</strong>: Hasta que un fichero JavaScript no se ha leido completamente el navegador no continua con la carga. Si los movemos al final de la página este se estará cargando cuando el usuario ya está navegando por la web.</p>
<p><strong>10. Evitar llamadas duplicadas a JavaScript y CSS</strong>: Si el navegador encuentra un fichero JavaScript para la carga hasta que este se ha leido completamente, si posteriormente vuelve a encontrar una llamada al mismo JS, volverá a parar la carga hasta que se haya leido.</p>
<p style="text-align: right;">Vía | <a title="Optimización aplicaciones PHP" href="http://www.slideshare.net/maguilar/phpbarcelona-conference-optimizacin-aplicaciones-php-client-side" target="_blank">Optimización aplicaciones PHP</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://www.tecnoretales.com/programacion/como-optimizar-tus-aplicaciones-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Qué es una Caché y como aplicarla a la programación Web</title>
		<link>http://www.tecnoretales.com/programacion/que-es-una-cache-y-como-aplicarla-a-la-programacion-web/</link>
		<comments>http://www.tecnoretales.com/programacion/que-es-una-cache-y-como-aplicarla-a-la-programacion-web/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:15:27 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Caché]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Optimización]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.tecnoretales.com/?p=642</guid>
		<description><![CDATA[Vamos a ver que es una caché con un ejemplo muy ilustrativo que leí hace algún tiempo. Supongamos que estamos trabajando en una centralita que facilita números de teléfono de un pueblo relativamente pequeño; para ello, tenemos un listín telefónico común con todos los teléfonos del pais.
Cada vez que recibimos una llamada, cogemos el listín, [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Vamos a ver <strong>que es una caché</strong> con un ejemplo muy ilustrativo que leí hace algún tiempo. Supongamos que estamos trabajando en una centralita que facilita números de teléfono de un pueblo relativamente pequeño; para ello, tenemos un listín telefónico común con todos los teléfonos del pais.</p>
<p>Cada vez que recibimos una llamada, cogemos el listín, realizamos la búsqueda y facilitamos el número encontrado al usuario. Al poco tiempo, nos damos cuenta que la gente suele pedir los teléfonos de los mismos restaurantes y comercios una y otra vez, así que cogemos una libreta pequeña y vamos anotando los números de teléfono que nos solicitan ordenados alfabéticamente para poder <strong>acceder a ellos de manera más rápida</strong> la próxima vez&#8230; felicidades, acabas de crear una caché!<span id="more-642"></span></p>
<p>Sin embargo, el uso de una <strong>caché tiene un pequeño handicap</strong>; imaginemos que nos llama un usuario y nos solicita el teléfono de un comercio. Cogeremos nuestra libreta, lo buscaremos y si no lo encontramos recurriremos al listín, realizaremos la búsqueda en él y facilitaremos el número al usuario. En este momento estamos aumentando ligeramente el tiempo de búsqueda de un número, por ese motivo, la información debe almacenarse en la caché de manera eficiente, y a partir de aquí hay mil teorías sobre como y cuando almacenar la información en una caché.</p>
<p>En resumen y dicho de una manera más técnica un sistema de caché es una zona de memoria en la que se almacenan copias de un objeto original pero al que es mucho más rápido acceder.</p>
<h3><span style="text-decoration: underline;">La Caché en la programación</span>:</h3>
<p>A la hora de construir una aplicación medianamente grande, se hace imprescindible el cachear cierta información para conseguir un rendimiento óptimo. Un sistema de caché correctamente implementado puede <strong>reducir el número de servidores y evitar la sobrecarga</strong> de las máquinas.</p>
<p>Se pueden utilizar diferentes tipos de caché en función del tipo de datos que queramos guardar. Centrándome en la programación web, podemos encontrar:</p>
<ul>
<li><span style="text-decoration: underline;">Caché SQL</span>: Para almacenar en memoria el resultado de ciertas consultas recurrentes y poder así descargar la base de datos. MySQL 5.0 Server tiene soporte nativo para este tipo de caché pero se debe activar expresamente.</li>
<li><span style="text-decoration: underline;">Cachéo de Objetos</span>: En este tipo de caché podemos almacenar objetos, arrays, textos, resultados de funciones, resultados de base de datos&#8230; Podremos almacenar cualquier tipo de información soportada por el sistema de cacheo e indicarle el tiempo de expiración. Ejemplos de este sistema de caché para PHP son APC (Alternative PHP Cache) o Memcached.</li>
<li><span style="text-decoration: underline;">Cacheo de templates</span>: Puede ser de gran utilidad el cachear los resultados HTML al invocar diferentes URL, por ejemplo, el sistema de templates Smarty integra un sistema de caché que permite devolver el HTML de manera eficiente.</li>
</ul>
<h3><span style="text-decoration: underline;">Por qué no debo usar SQLCaché y APC o Memcached?</span></h3>
<p>La caché implementada por MySQL tiene una política en la gestión de su caché muy estricta. Cada vez que hay una escritura en una tabla, elimina toda la caché asociada a dicha tabla y a partir de ese momento, se debe volver a regenerar, por tanto, la entrada de un registro en la tabla implica insertar el registro, regenerar los indices, cachear los datos y por último devolverlos (aumentamos el tiempo de la consulta). Dada esta premisa, podemos extraer la conclusión de que es interesante <strong>activar SQLCaché en una base de datos con muchas lecturas y pocas escrituras</strong>.</p>
<p>A su vez, implementando un sistema de cacheo como APC o Memcached para almacenar la información devuelta por la base de datos dada una consulta, reduce considerablemente el número de lecturas a base de datos.</p>
<p>Por ese motivo, el tener activados estos dos tipos de caché simultaneamente, no solo no mejora el rendimiento de nuestra aplicación sino que lo empeora.</p>
<h3><span style="text-decoration: underline;">Es contraproducente usar APC y Memcached de manera simultanea?</span></h3>
<p>APC proporciona dos tipos de cacheo. Por un lado, evita el continuo compilado de un script PHP, pues a pesar de ser un lenguaje interpretado, PHP pasa todo script a un lenguaje entendible por la máquina antes de ejecutarlo ¿por qué recompilar cada vez el script si no ha cambiado desde la última ejecución? A partir de la versión 6 de PHP parece ser que APC estará activado de forma nativa. Por otra parte, podemos almacenar objetos con el uso de las funciones <a title="APC_add" href="http://es.php.net/manual/en/function.apc-add.php" target="_blank">apc_add</a> y <a title="APC_store" href="http://es.php.net/manual/en/function.apc-store.php" target="_blank">apc_store</a>.</p>
<p>Memcached proporciona un servicio web desacoplado y altamente escalable. <strong>El 95% del top ten y el 80% del top 50 de Alexa utiliza Memcached</strong> precisamente por la facilidad de implementación y de añadir nuevas máquinas para cachear información. APC tiene un rendimiento ligeramente superior, pero si tenemos un sistema con servidores balanceados no podemos compartir la caché entre todas las máquinas porque está vinculada al host, por ese motivo la balanza se ha ido decantando hacia el uso de Memcached.</p>
<p>Si bien, puede ser interesante <strong>utilizar una combinación de ambas</strong>, APC para el <strong>precompilado</strong> de nuestro código y <strong>Memcached para almacenar</strong> la información de base de datos y descargar así nuestro motor de bd.</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://www.tecnoretales.com/programacion/que-es-una-cache-y-como-aplicarla-a-la-programacion-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

