Llevo tiempo queriendo escribir sobre este tema pero quería acabar de escribir un pequeño script en Python para si un servidor dado tiene o no activada la compresión.
La importancia de este mecanismo es que sirve para reducir significativamente el ancho de banda utilizado con un coste de CPU bastante bajo. Además, gzip es un mecanismo ampliamente soportado por todos los navegadores (publicado en la RFC 1951) desde hace años y por supuesto por los servidores web. Se basa en el algorimo deflate y permite compresión de un archivo cada vez (es decir, no es como el zip o el rar que pueden almacenar varios achivos y carpetas) y en entornos unix es ampliamiente usado en los archivos .tar.gz (tar almacena la estructura sin comprmir y gzip comprime el resultado).
Evidentemente, no hace milagros pero es muy efectivo para la compresión de HTML (.htm, .html), Javascript (.js), CSS (.css) y por supuesto archivos dinámicos resultado de todo tipo de entornos (.aspx, .asp, .php, .py…). Comprimir las imágenes por ejemplo no sirve para nada salvo para perder el tiempo y desperdiciar CPU (a lo mejor .bmp si que los comprime… pero espero que nadie esté sirviendo estos archivos en su servidor).
En Apache suele estar activada por defecto en la mayoría de instalaciones (a través de mod_gzip), aunque puede que haya que activarla o configurarla manualmente si no se ajusta al las necesidades.
En IIS, el proceso es un tanto más laborioso, aunque con la versión 6 (y la 7, naturalmente) viene de serie todo lo necesario para activar esta compresión (aun así hay módulo ISAPI de terceros). Una buena explicación en español y otra en inglés no vendrán nada mal. Lo único delicado es no poner nada mal en la metabase porque en ese caso no hará ni caso.
Luego, hay unos cuantos sitios para comprobar si todo ha funcionado bien, pero uno de los que más me ha gustado es test mod_gzip/gzip de WhatsMyIP.org. O también se puede adaptar mi pobre script:
import urllib2;
import httplib;
import StringIO;
import gzip;
import zlib;
URL = "http://codelog.climens.net";
httplib.HTTPConnection.debuglevel = 1
req = urllib2.Request(URL);
req.add_header('Accept-encoding', 'gzip');
opn = urllib2.build_opener();
f = opn.open(req);
encoding = f.headers.get('Content-encoding');
gzipped = 0;
if encoding=='gzip':
cdata = f.read();
cdatasize = float(len(cdata));
cstream = StringIO.StringIO(cdata);
data = gzip.GzipFile(fileobj=cstream).read();
datasize = float(len(data));
gzipped = 1;
else:
data = f.read();
datasize = float(len(data));
gzipped = 0;
if gzipped==1:
print 'Gzip compression: Enabled';
print 'Compressed size: %d bytes' % cdatasize;
print 'Full size: %d bytes' % datasize;
print 'Ratio: %0.2f:1 (%0.1f%%)' % (float(datasize/cdatasize), float(100 - cdatasize*100/datasize));
else:
print 'Gzip compression: Disabled';
print 'Content size: %d bytes' % datasize;
Feliz compresión.
By Juan Felipe 20 junio, 2009 - 0:02
mi servidor comprime los php pero no comprime los html, css, o js, por lo menos eso es lo que me muestra YSLOW en las cabeceras, como hago para que los comprima??
By climens 20 junio, 2009 - 12:03
Si tus páginas están en un hosting contratado, deberías contactar con ellos. Si lo gestionas tú, deberías informarte de qué tipo de servidor estas usando (IIS, Apache…) y mirar la documentación específica para ese tipo de servidor.
By Carlos 27 junio, 2009 - 5:53
Ningún hosting compartido permitirá la compresión de archivos, ya que esto reduciría los recursos del mismo.
Pero el dato está excelente.
By climens 27 junio, 2009 - 9:42
Yo estoy ahora mismo usando el hosting compartido de Dreamhost y me hace compresión gzip de la mayoría de los contenidos estáticos. Usar gzip tiene muy poco impacto en la CPU y reduce el tráfico, es encontrar el compromiso, pero diría que es más caro el ancho de banda que la capacidad de proceso.
By carlos 15 febrero, 2012 - 6:22
Hola gracias por esta imformacion.
e terminado mi primera pagina web y me e dado cuenta de que es demaciado pesada y me gustaria que me echaras la mano con este problema que tengo mi duda es en donde enque parte coloco la comprezion gzip mi servidor es apache y mi pagina es html.
te estaria super agradecido por tu ayuda amigo……
By climens 15 febrero, 2012 - 9:18
Hola @carlos.
Si administras tú el servidor Apache, puedes probar esto: Optimización: Utilizar compresión Gzip
Y si tienes un hosting compartido, quizás puedas activarlo a través del fichero .htaccess, pero depende del hosting, tal como se explica aquí: Como hacer un archivo .htaccess para habilitar la compresión gzip web
Suerte!