Compression em JavaScript (Node.js): guia completo com exemplos
1. O que é e para que serve
A biblioteca compression para Node.js é um middleware para o framework Express (e outros frameworks compatíveis) que comprime automaticamente as respostas HTTP do servidor usando os algoritmos Gzip, Deflate ou Brotli. Ela é o padrão de facto para otimizar a performance de aplicações web em Node.js, pois reduz significativamente o tamanho dos dados transferidos (HTML, CSS, JavaScript, JSON, imagens, etc.) entre o servidor e o cliente.
Por que isso é importante? Na web moderna, a velocidade de carregamento das páginas é crucial para a experiência do usuário e para o SEO. A compressão de dados permite reduzir o volume de tráfego de 3 a 10 vezes (dependendo do tipo de conteúdo). Por exemplo, um arquivo HTML de 100 KB após a compressão Gzip pode pesar apenas 10–15 KB. Isso é especialmente relevante para usuários móveis com tráfego limitado e para APIs que retornam grandes objetos JSON. Sem usar a compression, o servidor enviará dados "brutos", aumentando o tempo de carregamento e a carga na rede.
A biblioteca automatiza completamente o processo: ela verifica o cabeçalho Accept-Encoding na requisição do cliente, seleciona o algoritmo de compressão adequado (geralmente gzip ou brotli, se suportado), comprime a resposta e adiciona os cabeçalhos correspondentes (Content-Encoding, Vary). O desenvolvedor só precisa conectar o middleware na cadeia de processamento de requisições do Express. Isso torna a compression uma ferramenta indispensável para qualquer aplicação em produção no Node.js.
2. Instalação
A biblioteca é instalada via npm (Node Package Manager). Certifique-se de ter o Node.js instalado (versão 12 ou superior). Execute o comando na raiz do seu projeto:
npm install compression
Se você usa yarn:
yarn add compression
Após a instalação, a biblioteca estará disponível para importação no seu código.
3. Início rápido — exemplo mínimo funcional
A maneira mais simples de começar a usar a compression é conectá-la como middleware no Express. Abaixo está um servidor mínimo que comprime todas as respostas:
const express = require('express');
const compression = require('compression');
const app = express();
const port = 3000;
// Conecta o middleware de compressão
app.use(compression());
// Rota comum
app.get('/', (req, res) => {
// Envia uma resposta grande (repete a string 1000 vezes)
const bigData = 'Hello, World! '.repeat(1000);
res.send(bigData);
});
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});
Após iniciar (node app.js), abra o navegador em http://localhost:3000. Nas ferramentas do desenvolvedor (aba Network), você verá que a resposta está comprimida (cabeçalho Content-Encoding: gzip). O tamanho da resposta será várias vezes menor que o original.
4. Principais métodos/funções/classes
A biblioteca compression fornece uma função principal — o middleware, que é configurado através de um objeto de opções. Vejamos 8 aspectos-chave para trabalhar com ela.
4.1. compression([options]) — criando o middleware
Assinatura: compression(options?: CompressionOptions): RequestHandler
O que faz: Cria e retorna uma função middleware para o Express. Aceita um objeto opcional com configurações.
Exemplo:
const compression = require('compression');
const app = require('express')();
// Sem opções (comportamento padrão)
app.use(compression());
// Com opções
app.use(compression({
level: 6, // Nível de compressão (0-9)
threshold: 1024, // Não comprimir respostas menores que 1 KB
filter: (req, res) => {
// Lógica de filtro personalizada