Usar compresión GZip en tus páginas web, por ejemplo en Prestashop

Una de las cosas que más cuentan los buscadores es la rapidez de tu página. Y esta puede verse afectada o por mal código, o por mucho acceso.  Los hosting compartidos tienen un ancho de banda limitado (y unos recursos de servidor).Evidentemente cuanto más gente acceda más afecta al rendimiento. Por lo tanto es buena idea que el servidor comprima el contenido de la página web, lo que hace que no afecte tanto al ancho de banda y el lector reciba antes la información. En WordPress por ejemplo hay módulos que dan el contenido de páginas dinámicas a las que se accedan mucho en modo estático, optimizando bastante la velocidad de acceso.

Pero es que aunque no contara para el SEO, evidentemente una persona que note que la web vaya lenta…acabará hartándose y marchándose. Por lo tanto es buena idea activar la compresión GZip en el servidor, a veces reduce hasta un 80% el tamaño de las páginas. Aquí te decimos cómo:

Apache consigue la compresión a través de los módulos mod_gzip y mod_deflate. Para ello primero tendrás que ver si están activados en tu proveedor. Puedes usar un fichero php_info(). SI están cargados pero no está haciendo la compresión puedes activarlos a través de .htaccess (pequeño fichero que se añade en la raíz para modificar parámetros de Apache y php).  SI ESTÁN ACTIVADOS LOS MÓDULOS:
Para activarlo para html y texto:

# compress all text and html:

AddOutputFilterByType DEFLATE text/html text/plain text/xml
# Or, compress certain file types by extension:
<Files *.html>
SetOutputFilter DEFLATE
</Files>
Con mod_deflate puedes elegir los ficheros a comprimir (gif,jpeg, png:

<Location />
    SetOutputFilter DEFLATE
      SetEnvIfNoCase Request_URI  \
        \.(?:gif|jpeg|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI  \
        \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
</Location>

Así lo puedes hacer con mod_gzip:

<IfModule mod_gzip.c>
    mod_gzip_on       Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include handler   ^cgi-script$
    mod_gzip_item_include mime      ^text/.*
    mod_gzip_item_include mime      ^application/x-javascript.*
    mod_gzip_item_exclude mime      ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

 En nuestro caso los módulos estaban pero desactivados. Prestashop metía el código correcto pero Apache ni caso. Así que SI NO ESTAN ACTIVOS LOS MÓDULOS:

Usando PHP:

Puedes meter este código en cada página de PHP que quieras que se comprima. O, como en nuestro caso, en una que se cargue siempre (en Prestashop usamos config/config.inc.php).

<?php

    if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
        ob_start("ob_gzhandler");
    else
        ob_start();
?>

¿Quieres probar a ponerlo en .htaccess en vez de en cada fichero? A nosotros no nos funcionó pero como depende de cada servidor puedes probarlo. Para sólo los php:

<FilesMatch "\.(txt|html|htm|php)">
    ForceType application/x-httpd-php
    php_value auto_prepend_file /the/full/path/gzip-enable.php
</FilesMatch>

Para hacerlo para todos los ficheros. Primero:
php_value output_handler ob_gzhandler

Luego por ejemplo para los CSS crea este fichero gzip-css.php y pon:

<?php
   // initialize ob_gzhandler function to send and compress data
   ob_start ("ob_gzhandler");
   // send the requisite header information and character set
   header ("content-type: text/css; charset: UTF-8");
   // check cached credentials and reprocess accordingly
   header ("cache-control: must-revalidate");
   // set variable for duration of cached content
   $offset = 60 * 60;
   // set variable specifying format of expiration header
   $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
   // send cache expiration header to the client broswer
   header ($expire);
?>

Después en el .htaccess:

<FilesMatch "\.(css)">
    ForceType application/x-httpd-php
    php_value auto_prepend_file "/the/full/path/of/this/file/gzip-css.php"
</FilesMatch>

Para los JavaScrip crea el fichero gzip-js.php:

<?php

   // initialize ob_gzhandler function to send and compress data
   ob_start ("ob_gzhandler");
   // send the requisite header information and character set
   header ("content-type: text/javascript; charset: UTF-8");
   // check cached credentials and reprocess accordingly
   header ("cache-control: must-revalidate");
   // set variable for duration of cached content
   $offset = 60 * 60;
   // set variable specifying format of expiration header
   $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
   // send cache expiration header to the client broswer
   header ($expire);
?>
 y pon esto en el .htaccess:
<FilesMatch "\.(js)">
    ForceType application/x-httpd-php
    php_value auto_prepend_file "/the/full/path/of/this/file/gzip-js.php"
</FilesMatch>

Para ver cómo hacerlo en un servidor Tomcat pincha aquí.

 

 

Anuncios

3 thoughts on “Usar compresión GZip en tus páginas web, por ejemplo en Prestashop

  1. Hola, un artículo muy bueno, justo lo que estaba buscando, pero para los que no tenemos mucha idea un poco complicadillo 🙂 Empezando por lo más básico:

    “Para ello primero tendrás que ver si están activados en tu proveedor. Puedes usar un fichero php_info(). ”

    Cómo se usa ese fichero? gracias!

  2. Pues a mi no me funciona. He llamado al proveedor de hosting que le heche un vistazo pues debe estar mal configurado pues en el .info me dice que si tengo habilitada la comprensión pero luego no la hace.
    Muy buen articulo y muy clarito.
    Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s