Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 43 – API JavaScript, Node.js e Express – Compression – Otimizando responses

Imagem destacada da aula de API

Introdução (3 min)

Imagine tentar enviar uma caixa enorme cheia de penas pelo correio. O volume é grande, mas o peso é pequeno. Comprimir essa caixa, diminuindo seu tamanho, tornaria o envio muito mais barato e rápido. Comprimir respostas de API funciona de forma similar: reduzimos o tamanho dos dados transmitidos, otimizando a velocidade e economizando banda.

Em APIs modernas, a compressão é essencial para garantir um bom desempenho, especialmente em conexões móveis ou com baixa largura de banda. Nesta aula, vamos construir um servidor Express que comprime as respostas usando o middleware compression.

No ecossistema Node.js/Express, a compressão é um componente chave para entregar respostas eficientes, integrando-se com outros middlewares e otimizando a experiência do usuário.

Conceito Fundamental (7 min)

A compressão de resposta é o processo de codificar os dados enviados do servidor para o cliente num formato menor. Isso diminui o tempo de transferência e melhora o desempenho percebido pelo usuário. Algoritmos comuns incluem gzip, deflate e brotli.

Na indústria, termos como “content-encoding”, “transfer-encoding” e “compression ratio” são frequentes. Em produção, plataformas de streaming e e-commerce, por exemplo, se beneficiam fortemente da compressão.

A compressão se integra com outras tecnologias como caching e balanceamento de carga, amplificando os ganhos de performance.

Vantagens: Menor consumo de banda, carregamento mais veloz, melhor SEO.

Desvantagens: Consumo adicional de CPU no servidor (geralmente insignificante comparado aos benefícios).

Implementação Prática (10 min)

// Importando os módulos necessários
const express = require('express');
const compression = require('compression');

const app = express(); const port = 3000;

// Habilitando o middleware de compressão app.use(compression());

// Rota de exemplo que retorna uma grande quantidade de dados app.get('/data', (req, res) => { // Simulando dados extensos let largeData = 'a'.repeat(100000);

// Definindo o cabeçalho Content-Type explicitamente, uma boa prática res.setHeader('Content-Type', 'text/plain');

try { res.send(largeData); } catch (error) { console.error("Erro ao enviar dados:", error); // Logging profissional res.status(500).send("Erro interno do servidor"); // Resposta de erro adequada } });

// Iniciando o servidor app.listen(port, () => { console.log(Servidor rodando em http://localhost:${port}); });

Comentários:

    • compression() habilita a compressão com configurações padrão, ideal para HostGator Plano M.
    • res.setHeader('Content-Type', 'text/plain') define explicitamente o tipo de conteúdo.
    • O bloco try...catch implementa um error handling robusto.
    • 'a'.repeat(100000) simula dados volumosos para demonstrar a compressão.

Alternativas: É possível configurar o nível de compressão com compression({ level: 9 }) para máxima compressão (mais CPU) ou compression({ level: 1 }) para mínima compressão (menos CPU).

Exercício Hands-On (5 min)

Desafio: Crie uma nova rota /users que retorne um array de objetos JSON. Implemente a compressão.

Solução:

app.get('/users', (req, res) => {
    const users = [
        { id: 1, nome: 'João' },
        { id: 2, nome: 'Maria' }
    ];
    res.json(users); // Express lida com Content-Type para JSON automaticamente
});

Teste: Utilize uma ferramenta como curl ou o navegador para acessar as rotas /data e /users e observe os cabeçalhos de resposta, especialmente content-encoding, para verificar se a compressão está funcionando. Ferramentas de desenvolvedor no navegador também mostram o tamanho da resposta comprimida e descomprimida.

Troubleshooting: Verifique se o módulo compression está instalado (npm install compression). Certifique-se que o middleware compression() é declarado antes das rotas.

Próximos passos: Explore outros algoritmos de compressão como o Brotli para uma performance ainda melhor.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas