¿Qué es gzip? Rasgos generales sobre la herramienta de compresión

Gzip, la herramienta de compresión de datos, fue creada por los programadores Jean-Loup Gailly y Mark Adler, que llevaron a cabo la misión de desarrollar una alternativa de alto rendimiento para el programa compress de Unix. Tanto sus funciones como su procedimiento están definidas en el estándar de POSIX, que se encarga de la compresión de archivos mediante el algoritmo adaptativo Lempel-Ziv. Tanto el algoritmo como su ampliación, llevada a cabo por el científico Terry Welch, estuvieron protegidas durante años (hasta 2003) por patentes estadounidenses, lo que se convirtió en un motivo más que decisivo para trabajar en una alternativa adecuada para este. En ello, el foco de atención se centró en hacer que la compresión con gzip fuera más eficiente de lo que era con la herramienta de Unix, algo que se logró con éxito.

¿Cómo funciona gzip?

gzip, abreviatura de GNU zip, se basa en el algoritmo deflación, una variación del método de compresión de archivos LZ77 (Lempel-Ziv 77), y en la codificación Huffman. Con ayuda de ambas técnicas, gzip escanea archivos en busca de cadenas de caracteres dobles. Si el programa encuentra este tipo de secuencias repetitivas, las reemplaza por una referencia a la primera cadena, donde la longitud de una secuencia de dichas características está generalmente limitada a 32.000 bytes. Si una cadena de caracteres no aparece en los 32.000 bytes anteriores, será almacenada sin comprimirse en el archivo gzip, cuya terminación es .gz. El procedimiento se restringe a archivos individuales, por lo que se necesita el archivador tar para crear los llamados archivos tarball con las terminaciones .tar.gz o .tgz.

Consejo

el archivo de origen desaparece normalmente tras la compresión con gzip, aunque esta opción puede desactivarse de manera automática con el parámetro opcional (-k).

Para volver a descomprimir paquetes comprimidos, se puede recurrir o bien a la aplicación gunzip o al comando gzip correspondiente. Las características y la estructura del formato gzip, que se transforman en el archivo durante la compresión, aparecen definidas en las especificaciones publicadas en 1996 RFC 1951 y en RFC 1952. Aquí se incluyen, por ejemplo, un header de 10 bytes de longitud con número de versión y fecha, headers adicionales opcionales, que almacenan por ejemplo el nombre original del archivo fuente, y un pie de página de 8 bytes, que contiene, entre otros, una suma de comprobación para la detección de errores.

¿En qué ámbitos puede usarse la herramienta de compresión?

gzip fue desarrollada originariamente para la plataforma unixoide GNU, aunque hoy en día puede utilizarse en cualquier plataforma siempre y cuando se respete la licencia GPL seleccionada para el proyecto. En los sistemas Linux, lo habitual es que esta herramienta de compresión se instale automáticamente o que esté lista para instalarse en el sistema de administración de paquetes. Además de diversas ediciones para los sistemas operativos más antiguos, la página web oficial también alberga versiones para macOS y Windows. A esto cabe añadir el hecho de que las aplicaciones de servidor como Apache pueden controlar la tarea de comprimir con gzip desde hace años, aun cuando no siempre se utilice esta función, así como la capacidad que tienen los navegadores modernos de interpretar los archivos comprimidos y de descomprimirlos durante la representación de las páginas web.

En el ámbito del desarrollo web es donde gzip puede aprovechar su potencial completamente: si se activa el procedimiento, el servidor comienza automáticamente la compresión de los elementos de las páginas web tanto cargados en el espacio web como generados de forma dinámica. De esta manera se puede reducir el tiempo de carga de las páginas web para los visitantes. El hecho de que los usuarios solo tengan que cargar los paquetes de datos comprimidos hace que las páginas puedan generarse mucho más rápido. Mientras tanto, el navegador lleva a cabo la descompresión en un segundo plano sin que ello implique utilizar un mayor ancho de banda. Los usuarios de los dispositivos móviles son los que mayores beneficios obtienen de este rendimiento óptimo, que influye de manera positiva e indirecta en el ranking en los buscadores.

gzip: sintaxis y comandos

Aun cuando existen interfaces gráficas para las diferentes plataformas, el manejo de gzip en el terminal o los comandos puede llevarse a cabo sin ningún tipo de dificultades. Este proceso no supone un gran desafío ni siquiera para los usuarios menos experimentados, debido a que gzip es una herramienta clásica de líneas de comandos optimizada para estos usos. La sintaxis general tiene la siguiente forma:

gzip opciones archivo (s)

La utilización de opciones no es obligatoria. Si el campo permanece vacío, gzip recurre a la configuración predeterminada. Así, solo se necesita, por ejemplo, el sencillo comando

gzip ejemplo.txt

para crear una versión comprimida del archivo de texto ejemplo.txt. Para poder descomprimir archivos posteriormente o dar instrucciones especiales sobre el grado de la compresión, la ubicación del fichero o el tratamiento del archivo original, los comandos necesitan las especificaciones que sean adecuadas para cada caso. La siguiente tabla ofrece una panorámica general sobre los comandos de gzip más importantes:

Opción Descripción
-1 … -9 Define el grado de compresión (1–9): el valor 1 se aplica a la compresión más débil y más rápida y el valor 9 a la mejor compresión, pero también más lenta; 5 es el valor predeterminado
-r Hace un recorrido de manera recursiva por el directorio (incluyendo los subdirectorios) y comprime o descomprime todos los archivos que contiene
-f Fuerza la compresión con gzip y sobreescribe, en caso necesario, los archivos existentes con los mismos nombres de archivo
-d Descomprime el archivo seleccionado en el directorio actual
-k Impide la eliminación del archivo original
-l Muestra datos como, p. ej., la tasa de compresión de un archivo comprimido
-c Hace que el archivo comprimido vuelva a su versión estándar; por lo general, la pantalla asociada a la línea de comandos
-q Desactiva todas las notificaciones de gzip
-t Comprueba la integrad del archivo comprimido
-h Ofrece una lista de todas las opciones disponibles

¿Cómo se puede utilizar la compresión con gzip para los proyectos con Apache?

En general, los servidores web ofrecen el práctico método de la compresión a través de un módulo que tiene, lógicamente, que activarse. Hoy en día, muchos proveedores de hosting ponen esta función a disposición de forma libre, aunque la situación era algo distinta en el pasado. El telón de fondo en este sentido es principalmente que la compresión exige una potencia de procesamiento adicional, por lo que si no se tiene la certeza de que el proveedor del alojamiento autoriza la utilización de gzip, lo recomendable es contactarle directamente o, como alternativa, hacer una consulta manual.

En un servidor web Apache, se puede comprobar la configuración del módulo, por ejemplo, con la ayuda de una sencilla función phpinfo(). La entrada HTTP_ACCEPT_ENCODING revela cuáles son los métodos de compresión o si se ha seleccionado alguno.

Si gzip está disponible, el uso del asistente de compresión en función de tus necesidades ofrece un gran número de posibilidades.

Cómo activar la función de comprimir con gzip en el archivo .htaccess

A través de un archivo .htaccess se pueden realizar los ajustes relativos a los directorios específicos (son válidos tanto para los directorios actuales como para los subdirectorios) para configurar el servidor web en tiempo real. Esto se consigue gracias a que un archivo de configuración, que se encuentra normalmente en el directorio raíz y que llega al servidor con cada petición, puede leerse de forma automática. En el caso de algunos proveedores de alojamiento web, el archivo .htaccess se deposita o se oculta en otra carpeta o tiene el acceso bloqueado. Si esto ocurre, solo se puede contactar con el proveedor para solicitar que lo desbloquee. Si se llevan a cabo los ajustes pertinentes, puedes comenzar la compresión con gzip (mod_gzip) o recurrir al módulo para el algoritmo deflación (mod_deflate), donde se insertará el siguiente código:

<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>

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
Consejo

es necesario que el proveedor de hosting desbloquee el acceso tanto para el módulo mod_gzip como para mod_deflate.

Cómo comprimir con gzip vía PHP

También es posible activar el proceso de compresión con ayuda de una entrada PHP. El inconveniente en este caso radica en que el código tiene que insertarse de manera individual para cada documento PHP. Por ello, se recomienda recurrir a esta opción cuando no se cuenten con los permisos necesarios para poder editar el archivo .htaccess. La secuencia de caracteres que se tiene que incluir al principio del archivo correspondiente es la siguiente:

<?php
ob_start("ob_gzhandler");
?>

Cómo implementar gzip con un plugin para CMS

Además de las dos soluciones manuales presentadas, existe otra variante que requiere unos esfuerzos de configuración mínimos: activar la compresión con gzip mediante un plugin para el sistema de gestión de contenidos que se esté utilizando. Este tipo de extensiones útiles, cuya integración solo requiere unos minutos y que además se adapta a tus gustos y preferencias, está disponible sobre todo para CMS basados en PHP, como WordPress. La siguiente lista contiene tres de los plugins más populares para el software para blogs:

  • W3 Total Cache: el plugin de WordPress W3 Total Cache promete un rendimiento de las páginas web diez veces superior. Además de diversos mecanismos de caché y de una asistencia móvil especial, esta suite SEO y de usabilidad también incluye opciones para activar la compresión gzip.
  • Check and Enable GZIP compression: con esta extensión, también desarrollada para WordPress, se puede comprobar si hay posibilidad de activar la compresión gzip en tu proyecto. Para ello, el plugin recurre al servicio online checkgzipcompression.com. Si la compresión está desactivada, el plugin sirve de ayuda para su instalación.
  • WP Performance Score Booster: la extensión WP Performance Score Booster puede albergar más de 150.000 descargas y 30.000 instalaciones activas. Con ayuda del plugin se puede activar gzip fácilmente y comprimir de manera efectiva los contenidos de tu proyecto web, tales como textos, HTML, JavaScript, CSS, XML, etc.

En otros sistemas como Joomla no es necesario recurrir a ninguna extensión, ya que la versión básica del CMS lleva integradas funciones para activar la técnica de la compresión.

¿Cómo se activa gzip en el servidor web NGINX?

Si pones los contenidos de tu página web a disposición a través de un servidor web NGINX, esto te da la posibilidad de emplear la técnica de comprimir con gzip para mejorar el tiempo de carga de tu proyecto. Para ello, es necesario, sin embargo, que configures el módulo ngx_http_gzip_module. Por lo general, la directiva “gzip”, a través de la que puedes activar o desactivar el servicio de compresión, está desactivada. Para modificar su estado, abre nginx.conf y busca la directiva “gzip”. Después, cambia la entrada “gzip off” por “gzip on”. La siguiente tabla te muestra información sobre el significado y las posibilidades de algunas directivas para configurar la compresión gzip para NGINX:

Directiva Sintaxis Configuración predeterminada Descripción
gzip_buffers gzip_buffers cantidad tamaño; gzip_buffers 32 4k; 16 8k; Define la cantidad y el tamaño de los búferes para la compresión
gzip_comp_level gzip_comp_level grado de compresión; gzip_comp_level 1; Ofrece el grado de compresión; valores comprendidos entre 1–9
gzip_min_length gzip_min_length longitud mínima; gzip_min_length 20; Indica la longitud mínima en bytes de un archivo comprimido
gzip_http_version gzip_http_version número de versión; gzip_http_version 1.1; Establece a partir de qué versión de HTTP una petición recibe una respuesta comprimida
gzip_types gzip_types tipo de contenido; gzip_types text/html; Regula para qué tipos de contenidos es válida la compresión (es posible para: CSS, JSON, XML, etc.)

¿Cómo se puede examinar la compresión?

Una vez configurada la compresión gzip, puedes utilizar diferentes herramientas online para asegurarte de que el procedimiento funciona como esperabas y de que el servidor web entrega contenidos comprimidos para las solicitudes correspondientes. En este sentido se recomienda, sobre todo, la aplicación de Google PageSpeed Insights. Tras introducir el URL de la página web en cuestión, la herramienta analiza automáticamente su contenido y ofrece información sobre los aspectos más destacados de su rendimiento. De este modo, puedes averiguar, por ejemplo, si la compresión con gzip está activada o no. Como alternativa, también puede llevarse a cabo una sencilla prueba sobre gzip con el test de compresión de HTTP en WhatsMyIP.org

Consejo

puesto que los tests generan algunos errores de vez en cuando, es conveniente realizarlos en más de una página del proyecto web