Ahorrar ancho de banda. Compresión HTTP de ficheros html, .css y .js
Programacion Web, Wordpress 4 diciembre 2007
Aquí tenéis un artículo que me ha encantado para ayudaros a comprimir los ficheros html, css y js por cortesía de de-mas.net que me ha ayudado a optimizar mas el ancho de banda. Yo de momento he seguido sus pasos y con el tiempo veré que tal ha ido.
A medida que aumentan las visitas a nuestro sitio web también aumenta la transferencia consumida. Si queremos evitar que el aumento sea desproporcionado, haciendo que nuestro hosting se quede pequeño, lo podemos evitar comprimiendo los ficheros html, css y js que enviamos al usuario desde el servidor, reduciendo el tamaño en un 60% y también el uso del procesador (el coste de compresión consume menos CPU que el tener una conexión abierta más tiempo para transmitir los ficheros). Si quieres puedes comprobar como quedaría tu web comprimida en esta página: port80.Para hacerlo existen varias maneras y la mejor que he encontrado (más rápida y fácil) es mediante el uso del .htaccess y un pequeño fichero en php. Los pasos son:
Aviso! Si usas wordpress y ya tienes habilitada la opción de compresión, desactivala (Opciones ->Lectura) ya que con el método que usa wordpress no comprime los css ni los js.
Paso 1.-Añadimos estas tres lineas al final del fichero .htaccess
# Activa la compresion en el servidor
php_flag zlib.output_compression On
# Indica el nivel de compresion de 1 a 9 (de menor a mayor compresion)
php_value zlib.output_compression_level 5
# Indica sobre que extensiones se aplica la compresion
AddHandler application/x-httpd-php .css .js
Paso 2.-Con el código anterior ya debería bastar, pero veremos que las páginas webs no se visualizarán correctamente en Firefox, pero si en el Internet Explorer. Esto es debido a que hemos machacado las cabeceras de los ficheros .css y .js y los envia con una cabcera html (”Content-type: text/html”). Para evitar esto deberemos incluir una linea más en el fichero .htaccess y subir un archivo nuevo al servidor:
Paso 2.1.-Crearemos el fichero contentHeader.php que dejaremos en nuestro servidor con el siguiente código:
<?php
$pathinfo = pathinfo($_SERVER['PHP_SELF']);
$extension = $pathinfo['extension'];
if($extension == "css"){
header("Content-type: text/css");}
if($extension == "js"){
header("Content-type: text/javascript");}
?>
Paso 2.2.-Añadimos la siguiente linea en el fichero .htaccess justo después de las anteriores:
# Si es un hosting compartido la "ruta_abosluta" seria por ejemplo /usr/home/de-mas.net/web/contentHeader.php
php_value auto_prepend_file /ruta_absoluta/contentHeader.php
Nota: Si no sabes tu ruta absoluta, no funcionará la página. Una forma de averiguarlo sería mediante un fichero php que te devuelva este valor:
<?php
$ruta_absoluta = getcwd();
echo $ruta_absoluta;
?>
Con estos dos últimos pasos lo que hacemos es formatear las cabeceras de los ficheros .css y .js para que Firefox las pueda interpretar correctamente.
Si queremos saber si nuestra web esta comprimida y ver los tiempos de carga, puedes descargarte el plugin Firebug para Firefox.
Los resultados se pueden apreciar con el siguiente ejemplo donde una web pasa de 28 KB a 8.5 KB, reduciendo el tamaño en un 70% y el tiempo de carga en un 33% (de 1282ms a 859ms).


Podemos comprobar con el plugin Firebug si la compresión se ha llevado mediante este tag de la cabecera HTTP

Fuente: de-mas.net
Vota este artículo:
Posts anterior y posterior:
Posts Relacionados:
- Previo: « Comprimir CSS para ahorrar ancho de banda
- Siguiente: Actualizar WordPress 2.3.1 a 2.3.2 »


mayo 29th, 2008 a las 12:28 am
He seguido las instrucciones y si bien apache parece que no da errores, la pagina de port80 me devuelve el mismo resultado antes y despues de editar y añadir los ficheros que habeis comentado.
He instalado zlib en mi servidor…
apt-get install zlibc zlib1g-dev zlib1g zlib-bin
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias… Hecho
zlib1g-dev ya está en su versión más reciente.
zlib1g ya está en su versión más reciente.
Se instalarán los siguientes paquetes NUEVOS:
zlib-bin zlibc
0 actualizados, 2 se instalarán, 0 para eliminar y 3 no actualizados.
Necesito descargar 99,0kB de archivos.
Se utilizarán 332kB de espacio de disco adicional después de desempaquetar.
Des:1 ftp://ftp.rediris.es etch/main zlib-bin 1:1.2.3-13 [28,8kB]
Des:2 ftp://ftp.rediris.es etch/main zlibc 0.9k-2 [70,1kB]
Descargados 99,0kB en 1s (64,0kB/s)
Seleccionando el paquete zlib-bin previamente no seleccionado.
(Leyendo la base de datos …
111932 ficheros y directorios instalados actualmente.)
Desempaquetando zlib-bin (de …/zlib-bin_1%3a1.2.3-13_i386.deb) …
Seleccionando el paquete zlibc previamente no seleccionado.
Desempaquetando zlibc (de …/archives/zlibc_0.9k-2_i386.deb) …
Configurando zlib-bin (1.2.3-13) …
Configurando zlibc (0.9k-2) …
OK, pero los de port80 siguen poniendome el mismo “size” 24407bytes y sigue saliendo Compression status: Uncompressed
Que más podría mirar o que puede indicarme que es lo que falla ?
Mil Gracias !!
mayo 29th, 2008 a las 10:03 pm
Hola rubin,
la verdad es que el apache en el que yo lo he probado no lo administro yo y este post me funcionó perfectamente, por eso está aqui.
Entiendo que lo que quieres es comprimir el WordPress, aqui tienes las opciones para activar la compresion en Apache.
Ya nos contarás. Suerte.
junio 2nd, 2008 a las 12:00 am
Hola David,
Os cuento, con al objeto de mejorar el rendimiento de mi apache, al final he acabado instalando Zend optimizer en su version 3.3.3
Una vez hecho esto, también me ha surgido un errror, activé la compresion de zlib y el blog de wordpress puede haber mejorado algo pero en el foro en phpBB me da el siguiente error:
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3086: ob_start() [ref.outcontrol]: output handler ‘ob_gzhandler’ conflicts with ‘zlib output compression’
He buscado la linea del “output handler” y le he probado a comentarla, sin éxito. También os queria preguntar que puedo hacer, ya que he buscado para desactivar este ‘ob_gzhandler’ y no he encontrado nada que me indicara, cual es el mejor tipo de compresión y como desactivo uno u otro (no se si formará parte del archivo php.ini o directamente en el código del phpBB)
Cualquier información es bienvenida para optimizar el sitio,
Muchas gracias por vuestra ayuda y muchas gracias al creador de este sitio web
Salud para tod@s !!
agosto 5th, 2008 a las 7:37 pm
rubin, ese error te marca porque no pueden usar ambas compresiones (documentado en la página de php). Debes usar una sola.
Espero que te sirva.
abril 10th, 2009 a las 12:04 am
[...] reducir los ficheros para que el propio navegador los descomprima. Tienes más información en este artículo. Para no complicarse, en wordpress lo mejor es usar el plugin PHP Speedy. Nos hará todo el [...]
junio 20th, 2009 a las 9:00 pm
me genera este error y no me muestra mi sitio:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@tiendamaps.firesoft.ws and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at tiendamaps.firesoft.ws Port 80