Compression en JavaScript (Node.js): guía completa con ejemplos
1. ¿Qué es y por qué usarla?
La librería compression para Node.js es un middleware para el framework Express (y otros compatibles) que comprime automáticamente las respuestas HTTP del servidor usando algoritmos como Gzip, Deflate o Brotli. Es el estándar de facto para optimizar el rendimiento de aplicaciones web en Node.js, ya que reduce significativamente el tamaño de los datos transferidos (HTML, CSS, JavaScript, JSON, imágenes, etc.) entre el servidor y el cliente.
¿Por qué es necesaria? En la web moderna, la velocidad de carga es crucial para la experiencia del usuario y el SEO. La compresión puede reducir el volumen de tráfico entre 3 y 10 veces, según el tipo de contenido. Por ejemplo, un archivo HTML de 100 KB puede pesar solo 10–15 KB tras la compresión Gzip. Esto es especialmente útil para usuarios móviles con datos limitados y para APIs que devuelven grandes objetos JSON. Sin compression, el servidor enviaría datos "en bruto", aumentando el tiempo de carga y la carga de la red.
La librería automatiza todo el proceso: verifica el encabezado Accept-Encoding de la solicitud, selecciona el algoritmo adecuado (generalmente gzip o brotli si es compatible), comprime la respuesta y agrega los encabezados correspondientes (Content-Encoding, Vary). El desarrollador solo necesita integrar el middleware en la cadena de procesamiento de Express. Esto hace que compression sea una herramienta indispensable para cualquier aplicación en producción con Node.js.
2. Instalación
La librería se instala mediante npm (Node Package Manager). Asegúrate de tener Node.js (versión 12 o superior). Ejecuta el siguiente comando en la raíz de tu proyecto:
npm install compression
Si usas yarn:
yarn add compression
Una vez instalada, la librería estará disponible para importarla en tu código.
3. Inicio rápido — ejemplo mínimo funcional
La forma más sencilla de empezar a usar compression es integrarlo como middleware en Express. A continuación, un servidor mínimo que comprime todas las respuestas:
const express = require('express');
const compression = require('compression');
const app = express();
const port = 3000;
// Integramos el middleware de compresión
app.use(compression());
// Ruta básica
app.get('/', (req, res) => {
// Enviamos una respuesta grande (repetimos el string 1000 veces)
const bigData = '¡Hola, Mundo! '.repeat(1000);
res.send(bigData);
});
app.listen(port, () => {
console.log(`Servidor iniciado en http://localhost:${port}`);
});
Después de ejecutar (node app.js), abre el navegador en http://localhost:3000. En las herramientas de desarrollo (pestaña Network) verás que la respuesta está comprimida (encabezado Content-Encoding: gzip). El tamaño de la respuesta será varias veces menor que el original.
4. Métodos/funciones/clases principales
La librería compression proporciona una función principal: el middleware, que se configura mediante un objeto de opciones. A continuación, los 8 aspectos clave para trabajar con ella.
4.1. compression([options]) — creación del middleware
Firma: compression(options?: CompressionOptions): RequestHandler
Qué hace: Crea y devuelve una función middleware para Express. Acepta un objeto opcional con configuraciones.
Ejemplo:
const compression = require('compression');
const app = require('express')();
// Sin opciones (comportamiento por defecto)
app.use(compression());
// Con opciones
app.use(compression({
level: 6, // Nivel de compresión (0-9)
threshold: 1024, // No comprimir respuestas menores a 1 KB
filter: (req, res) => {
// Lógica de filtrado personalizada También en la biblioteca
Envío de correo electrónico en JavaScript (Node.js): nodemailer, sendgrid, mailgun