La he­rra­mie­n­ta de co­m­pre­sión de datos gzip se puede utilizar en distintas pla­ta­fo­r­mas y es es­pe­cia­l­me­n­te útil en el ámbito del de­sa­rro­llo web y en proyectos online como solución de co­m­pre­sión. Gzip se activa y maneja fá­ci­l­me­n­te desde la he­rra­mie­n­ta de línea de comandos co­rre­s­po­n­die­n­te, lo que permite ahorrar espacio de al­ma­ce­na­mie­n­to y mejorar el re­n­di­mie­n­to del sistema.

¿Cómo funciona gzip?

gzip, abre­via­tu­ra de “GNU zip”, se basa en el algoritmo deflación, de uso libre, que combina el método de co­m­pre­sión de archivos LZ77 (Lempel-Ziv 77) con la co­di­fi­ca­ción Huffman. Con ayuda de ambas técnicas, gzip escanea archivos en busca de cadenas de ca­ra­c­te­res dobles. Si el programa encuentra este tipo de se­cue­n­cias re­pe­ti­ti­vas, las reemplaza por una re­fe­re­n­cia a la primera cadena. La longitud de estas se­cue­n­cias suele estar limitada a 32 000 bytes. Por tanto, si una cadena de ca­ra­c­te­res no aparece en los 32 000 bytes an­te­rio­res, será al­ma­ce­na­da sin co­m­pri­mi­r­se en el archivo gzip, cuya te­r­mi­na­ción es .gz.

Este método se aplica úni­ca­me­n­te a archivos in­di­vi­dua­les, por lo que es necesario utilizar además el programa de em­pa­que­ta­do tar para crear los llamados archivos Tarball con las ex­te­n­sio­nes .tar.gz o .tgz.

De forma pre­de­te­r­mi­na­da, el archivo de origen des­apa­re­ce no­r­ma­l­me­n­te tras la co­m­pre­sión con gzip (cuando se aplica di­re­c­ta­me­n­te sobre un archivo). Sin embargo, puedes des­ac­ti­var esta función de manera au­to­má­ti­ca con el parámetro opcional (-k). Para volver a de­s­co­m­pri­mir paquetes co­m­pri­mi­dos, se puede recurrir o bien a la apli­ca­ción gunzip o al comando gzip co­rre­s­po­n­die­n­te.

gzip: sintaxis y comandos pri­n­ci­pa­les

Aunque existen in­te­r­fa­ces gráficas para las distintas pla­ta­fo­r­mas, manejar gzip desde la terminal o línea de comandos es pe­r­fe­c­ta­me­n­te posible y muy sencillo. Incluso para quienes están empezando, no re­pre­se­n­ta un gran reto, ya que gzip está op­ti­mi­za­do como una he­rra­mie­n­ta clásica de línea de comandos. Su sintaxis general es la siguiente:

gzip opción archivo(s)
bash

No es obli­ga­to­rio es­pe­ci­fi­car ninguna opción. Si el campo permanece vacío, gzip recurre a la co­n­fi­gu­ra­ción pre­de­te­r­mi­na­da. Por ejemplo, este comando básico crea una versión co­m­pri­mi­da del archivo de texto ejemplo.txt:

gzip ejemplo.txt
bash

No obstante, si deseas de­s­co­m­pri­mir archivos o indicar pa­rá­me­tros es­pe­cí­fi­cos como el nivel de co­m­pre­sión, el di­re­c­to­rio de destino o qué hacer con el archivo original, ne­ce­si­ta­rás incluir las opciones adecuadas. En la siguiente tabla en­co­n­tra­rás un resumen de los comandos más im­po­r­ta­n­tes de gzip:

Opción De­s­cri­p­ción
-1-9 Define el nivel de co­m­pre­sión (1–9), donde 1 es el más rápido, pero menos eficiente, y 9 es el más eficiente pero más lento. El valor por defecto es 5
-r Busca re­cu­r­si­va­me­n­te en el di­re­c­to­rio (incluidos los su­b­di­re­c­to­rios) y comprime o de­s­co­m­pri­me todos los archivos co­n­te­ni­dos
-f Fuerza la co­m­pre­sión con gzip y so­bre­s­cri­be archivos exi­s­te­n­tes con el mismo nombre si es necesario
-d De­s­co­m­pri­me el archivo se­le­c­cio­na­do en el di­re­c­to­rio actual
-k Evita que se elimine el archivo original
-l Muestra in­fo­r­ma­ción como la tasa de co­m­pre­sión del archivo co­m­pri­mi­do
-c Muestra el archivo co­m­pri­mi­do en la salida estándar (ha­bi­tua­l­me­n­te, la pantalla vinculada a la terminal)
-q Desactiva todos los mensajes de gzip
-t Verifica la in­te­gri­dad del archivo co­m­pri­mi­do
-h Muestra todas las opciones di­s­po­ni­bles

¿En qué ámbitos puede usarse la he­rra­mie­n­ta de co­m­pre­sión gzip?

Hoy en día, gzip es co­m­pa­ti­ble con prá­c­ti­ca­me­n­te todas las pla­ta­fo­r­mas y puede ampliarse li­bre­me­n­te, siempre que se respete la licencia GPL elegida para el proyecto. En sistemas Linux, esta he­rra­mie­n­ta de co­m­pre­sión suele venir prei­n­s­ta­la­da o estar di­s­po­ni­ble en el gestor de paquetes. Además, en la página oficial de gzip también se pueden encontrar versiones para macOS y Windows, por lo que puedes usarla en estos sistemas en cualquier momento para ahorrar espacio de al­ma­ce­na­mie­n­to.

Otro campo de apli­ca­ción muy im­po­r­ta­n­te es el entorno web: se­r­vi­do­res como Apache admiten la co­m­pre­sión gzip desde hace años, y los na­ve­ga­do­res modernos pueden in­te­r­pre­tar los archivos co­m­pri­mi­dos y de­s­co­m­pri­mi­r­los durante el re­n­de­ri­za­do de la página web. En este contexto, gzip demuestra todo su potencial: si se activa esta fu­n­cio­na­li­dad, el servidor web comprime au­to­má­ti­ca­me­n­te tanto los elementos cargados en el espacio web como los elementos generados di­ná­mi­ca­me­n­te. De este modo, se puede reducir si­g­ni­fi­ca­ti­va­me­n­te el tiempo de carga de una página como parte de una es­tra­te­gia básica de op­ti­mi­za­ción web. La de­s­co­m­pre­sión se realiza en segundo plano en el navegador, sin necesidad de consumir ancho de banda adicional. Esta mejora de re­n­di­mie­n­to beneficia es­pe­cia­l­me­n­te a los usuarios de di­s­po­si­ti­vos móviles y, de forma indirecta, también mejora el po­si­cio­na­mie­n­to en bu­s­ca­do­res.

¿Cómo se puede utilizar la co­m­pre­sión con gzip en Apache?

Los se­r­vi­do­res web suelen ofrecer el método de co­m­pre­sión gzip en forma de un módulo que si­m­ple­me­n­te debes activar. Hoy en día, muchos pro­vee­do­res de hosting activan esta función por defecto, aunque la situación era algo distinta en el pasado. Si no estás seguro de si tu proveedor permite el uso de la co­m­pre­sión gzip, puedes co­n­su­l­tar­lo di­re­c­ta­me­n­te o realizar una co­m­pro­ba­ción manual.

En un servidor web Apache, se puede comprobar la co­n­fi­gu­ra­ció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 co­m­pre­sión o si se ha se­le­c­cio­na­do alguno.

Si gzip está di­s­po­ni­ble, dispones de tres opciones distintas para utilizar esta he­rra­mie­n­ta de co­m­pre­sión según tus ne­ce­si­da­des.

Opción 1: activar la co­m­pre­sión gzip desde el archivo .htaccess

Mediante un archivo .htaccess, puedes aplicar co­n­fi­gu­ra­cio­nes es­pe­cí­fi­cas por di­re­c­to­rio y así ajustar tu servidor web en tiempo real. Esto se consigue gracias a que un archivo de co­n­fi­gu­ra­ción, que se encuentra no­r­ma­l­me­n­te en el di­re­c­to­rio raíz y que llega al servidor con cada petición, puede leerse de forma au­to­má­ti­ca. En el caso de algunos pro­vee­do­res de alo­ja­mie­n­to web, el archivo .htaccess se deposita o se oculta en otra carpeta o tiene el acceso bloqueado. En ese caso, la única opción es contactar con el proveedor y solicitar acceso. Si tienes permiso para realizar mo­di­fi­ca­cio­nes, puedes activar la co­m­pre­sión con gzip a través del módulo del algoritmo deflación (mod_deflate), añadiendo el siguiente código al archivo .htaccess:

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

También ne­ce­si­ta­rás la au­to­ri­za­ción de tu proveedor de hosting para usar los módulos mod_gzip y mod_deflate.

Opción 2: activar la co­m­pre­sión gzip mediante PHP

También puedes activar la co­m­pre­sión gzip uti­li­za­n­do una sencilla línea de código en PHP. La de­s­ve­n­ta­ja de este método es que el código debe incluirse en cada archivo PHP por separado. Por eso, esta opción solo se re­co­mie­n­da si no tienes los permisos ne­ce­sa­rios para editar el archivo .htaccess. La línea de código que debes añadir al principio de cada archivo es la siguiente:

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

Opción 3: im­ple­me­n­tar gzip mediante un plugin

Además de las dos so­lu­cio­nes manuales pre­se­n­ta­das, existe otra variante que requiere unos esfuerzos de co­n­fi­gu­ra­ción mínimos: activar la co­m­pre­sión con gzip mediante un plugin para el sistema de gestión de co­n­te­ni­dos (CMS) que se esté uti­li­za­n­do. Estas útiles ex­te­n­sio­nes pueden in­te­grar­se en cuestión de minutos y adaptarse fá­ci­l­me­n­te a tus ne­ce­si­da­des. Están di­s­po­ni­bles sobre todo para CMS basados en PHP, como WordPress. A co­n­ti­nua­ción, te mostramos tres de los plugins más populares para esta pla­ta­fo­r­ma de blogs:

  • W3 Total Cache: el plugin de WordPress W3 Total Cache promete una mejora notable en el re­n­di­mie­n­to de la página web. Además de diversos me­ca­ni­s­mos de caché y de una asi­s­te­n­cia móvil especial, esta suite SEO y de usa­bi­li­dad también incluye opciones para activar la co­m­pre­sión gzip. WP Rocket: WP Rocket es también un clásico plugin de caching para WordPress. Esta extensión es fácil de usar y activa desde el principio todas las funciones clave para optimizar la velocidad, incluida la co­m­pre­sión gzip.
  • WP Pe­r­fo­r­ma­n­ce Score Booster: el plugin WP Pe­r­fo­r­ma­n­ce Score Booster ya cuenta con más de 10 000 in­s­ta­la­cio­nes activas. Con ayuda del plugin se puede activar gzip fá­ci­l­me­n­te y comprimir de manera efectiva los co­n­te­ni­dos de tu proyecto web, tales como textos, HTML, Ja­va­S­cri­pt, CSS, XML, etc.

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

Si pones los co­n­te­ni­dos de tu página web a di­s­po­si­ción a través de un servidor web NGINX, esto te da la po­si­bi­li­dad de emplear la técnica de comprimir con gzip para mejorar el tiempo de carga de tu proyecto. Para ello, solo tienes que co­n­fi­gu­rar ade­cua­da­me­n­te el módulo ngx_http_gzip_module. Por lo general, la directiva gzip, a través de la que puedes activar o des­ac­ti­var el servicio de co­m­pre­sión, está des­ac­ti­va­da.

Para cambiar esta co­n­fi­gu­ra­ción, abre el archivo nginx.conf y busca la directiva gzip. Después, cambia la entrada gzip off por gzip on. La siguiente tabla te muestra in­fo­r­ma­ción sobre el si­g­ni­fi­ca­do y las po­si­bi­li­da­des de algunas di­re­c­ti­vas para co­n­fi­gu­rar la co­m­pre­sión gzip para NGINX:

Directiva Sintaxis Co­n­fi­gu­ra­ción pre­de­te­r­mi­na­da De­s­cri­p­ció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 co­m­pre­sión
gzip_comp_level gzip_comp_level grado de compresión; gzip_comp_level 1; Ofrece el grado de co­m­pre­sión; valores co­m­pre­n­di­dos 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 co­m­pri­mi­do
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 co­m­pri­mi­da
gzip_types gzip_types tipo de contenido; gzip_types text/html; Regula para qué tipos de co­n­te­ni­dos es válida la co­m­pre­sión (es posible para: CSS, JSON, XML, etc.)

¿Cómo se puede examinar la co­m­pre­sión gzip?

Una vez co­n­fi­gu­ra­da la co­m­pre­sión gzip para tu página web, puedes utilizar di­fe­re­n­tes he­rra­mie­n­tas online para ase­gu­rar­te de que el pro­ce­di­mie­n­to funciona como esperabas y de que el servidor web entrega co­n­te­ni­dos co­m­pri­mi­dos para las so­li­ci­tu­des co­rre­s­po­n­die­n­tes. En este sentido se re­co­mie­n­da, sobre todo, la apli­ca­ción de Google PageSpeed Insights. Tras in­tro­du­cir el URL de la página web en cuestión, la he­rra­mie­n­ta analiza au­to­má­ti­ca­me­n­te su contenido y ofrece in­fo­r­ma­ción sobre los aspectos más de­s­ta­ca­dos de su re­n­di­mie­n­to. Entre otros datos, recibirás in­fo­r­ma­ción sobre si la co­m­pre­n­sión gzip está activada.

Como al­te­r­na­ti­va, también puede llevarse a cabo una sencilla prueba sobre gzip con la he­rra­mie­n­ta HTTP Co­m­pre­s­sion Test di­s­po­ni­ble en WhatsMyIP.org.

Ir al menú principal