Blogs Teoriza

Caché generada y soportada por Blogs Teoriza al servicio de la Blogosfera. (+herramientas)
Página cacheada: http://gonzo.teoriza.com/2007/12/23/optimizar-es-un-arte-parte-ii-pre-gzip-estatico-evitando-compresion-on-the-flight/ (autor original).
Fecha exacta captura: 2007-12-23 15:50:58 (GMT/UTC).


Optimizar es un arte, Parte II: pre-Gzip estático, evitando compresión on-the-flight :: GONZO
GONZO Mia Intimidades Chat Ocio Hosting Tarot Alarmas Hoteles Poesías

Optimizar es un arte, Parte II: pre-Gzip estático, evitando compresión on-the-flight

Segunda parte de una serie de artículos divulgativos sobre una de mis aficiones de mi trabajo, optimizar la carga web.

Parte II: Gzip estático

El único problema que tiene la compresión con Gzip (explicado en la Parte I) es que sacrifica consumo de CPU a cambio de obtener archivos 4 o 9 veces mas pequeños. En mi opinion realmente ahorra CPU, sin embargo existe esa delgada linea de rendimiento.

La solución que he desarrollado soluciona por completo este problema.

Ventajas:

  1. Elimina la necesidad de comprimir Gzip on-the-flight (en cada petición). Solo se hará una sola vez cada vez que se genere una caché del archivo en cuestión.
  2. Ahorra de 4 a 9 veces espacio en disco, ya que reduce el tamaño de los archivos. Para una caché es magnifico, como explicaré en el ejemplo práctico.
  3. Permite activar el nivel más potente de compresión (9) sin ningún miedo a colapso, ahorrando un poco más de espacio en disco, CPU por transferir más rápido y tiempo de carga.
  4. Además conserva todas las ventajas del Gzip (explicadas extensamente en la ParteI)

En qué consiste:

Consiste en guardar una copia pre-comprimida del archivo a transferir. El concepto es sencillo, evita la necesidad de comprimirlo al vuelo (on-the-flight) cada vez que se pide ese archivo de texto plano como ocurriría con Gzip normal.

Esto alivia radicalmente el consumo de CPU conservando, incluso aumentando la ventaja de comprimir a más nivel.

Ejemplo práctico:

La herramienta más usada de Blogs Teoriza es el Caché Web. Para el que no lo conozca es una sencilla aplicación web que genera una copia en texto plano de una pagina web dada.

Ahora funciona con este nuevo método. Con ello doy un paso de gigante en cuanto a rendimiento, uno más ya que conseguí desarrollarlo sin uso de MySQL y con apenas 10 lineas para presentar cada caché. Sin embargo permanecia la poca ventaja del gasto de CPU al comprimir las paginas.

Ahora las comprime una sola vez, cuando genera cada caché. Sirviendolas sin apenas procesar. Ligerísimo.

Antes aseguraba que aguantaba cualquier avalancha de visitas extremas… ahora ya doy por sentado que jamás conseguirán colapsarlo.

Donde aplicarlo:

Recomiendo usar esta metodología para los siguientes casos:

  • Cachés de cualquier tipo. (especialmente útil al ahorrar también tremendo espacio en disco)
  • CSS y javascript: en la mayoría de los casos estos archivos son totalmente estáticos y rara vez son modificados. Por lo tanto son candidatos perfectos a ser pre-gzipeados y ahorrar así enormes gastos de CPU.
  • Cualquier archivo en general que cumpla estas tres condiciones: texto plano, contenido estático (que no varía) y pocos cambios a lo largo del tiempo.

Cómo aplicarlo:

La clave del asunto es la función gzencode($datos, 9) para PHP.

Usándola de la siguiente manera se crea una copia de un archivo con terminación .gz y comprimido con Gzip al máximo en el disco duro del servidor.

<?php
if ($_GET[”archivo”]) {
$file = $_GET[”archivo”];
$data = implode(”", file($file));
$gzdata = gzencode($data, 9);
$fp = fopen($file . “.gz”, “w”);
fwrite($fp, $gzdata);
fclose($fp);
}
?>

Una vez creado el archivo, recomiendo enmascararlo con .htaccess. También se puede mejorar un poco la cosa, detectando si el navegador acepta Gzip para descomprimir el archivo en su defecto.

Otro punto a tener en cuenta es que hay que modificar la cabecera del archivo. Se resuelve desde .htaccess o fácilmente añadiendo esta linea PHP al principio del código:

header(”Content-Encoding: gzip”);

Y eso es todo para una interesante Parte II, espero que sirva a la comunidad.

(será privado)
(opcional)

Articulos relacionados:
Gráfico del consumo de transferencia con o sin compresión Gzip
Optimizar es un arte, Parte I: compresión Gzip, incluyendo CSS y javascript
optimizar
Dangerous Waters
Las influencias de algunos A-list de la blogosfera
El blog Chat. en segunda página buscando “chat”
Plugin Autoheader para Wordpress, mejora la informacion del header para un óptimo posicionamiento
Publicidad en el blog solo para IE
Incidente con adultfriendfinder, me han estafado
Fundamental