Compressão WebSocket Mais Rápida

· Recursos

A compressão WebSocket é essencial para reduzir a largura de banda e melhorar a responsividade, especialmente ao transmitir dados repetitivos como payloads JSON. A extensão permessage-deflate comprime cada frame WebSocket em tempo real — mas a velocidade dessa compressão impacta diretamente o throughput da sua aplicação.

A partir do sgcWebSockets 2026.4.0, a implementação do permessage-deflate foi completamente reescrita para desempenho significativamente mais rápido. Em nossos benchmarks, mensagens pequenas comprimem e descomprimem até 15x mais rápido, com ganhos mensuráveis em todos os tamanhos de payload.

O que Mudou?

A implementação anterior inicializava e destruía o motor de compressão em cada frame WebSocket. Isso significava que mesmo uma mensagem de 1 KB pagava o custo total de configurar o compressor, comprimir os dados e depois desmontar tudo — apenas para repetir o processo inteiro no próximo frame.

A nova implementação mantém o motor de compressão ativo entre frames. Ele é inicializado uma vez quando o primeiro frame chega e reutilizado durante toda a vida da conexão. Isso elimina o overhead de configuração por frame e também permite que o motor aprenda com mensagens anteriores, resultando em compressão mais rápida de padrões de dados repetitivos.

Além do contexto de compressão persistente, a nova implementação inclui várias outras otimizações:

Resultados do Benchmark

Executamos 10.000 ciclos de compressão + descompressão para cada tamanho de mensagem. Cada ciclo comprime um payload JSON e depois o descomprime, verificando se a saída corresponde ao original. O teste foi realizado em uma máquina Windows 64 bits compilada com Delphi 12 Athens.

Configuração Padrão (contexto persistente)

Este é o modo padrão onde o contexto de compressão é mantido entre frames — o cenário mais comum em produção:

Tamanho da Mensagem Anterior (ms) Novo (ms) Melhoria
1 KB 437 ms 28 ms 15,6x mais rápido
4 KB 480 ms 88 ms 5,5x mais rápido
16 KB 546 ms 431 ms 1,3x mais rápido
64 KB 1,994 ms 1,725 ms 1,2x mais rápido

Com NoContextTakeOver (frames independentes)

Quando o NoContextTakeOver está habilitado, cada frame é comprimido de forma independente. Mesmo nesse modo, as otimizações de reutilização de buffers e acesso direto à memória proporcionam uma melhoria sólida:

Tamanho da Mensagem Anterior (ms) Novo (ms) Melhoria
1 KB 149 ms 75 ms 2,0x mais rápido
4 KB 173 ms 100 ms 1,7x mais rápido
16 KB 302 ms 228 ms 1,3x mais rápido
64 KB 1,216 ms 1,094 ms 1,1x mais rápido

Quem Mais se Beneficia?

A melhoria é mais expressiva em aplicações que trocam muitas mensagens pequenas — que é exatamente o caso de uso típico do WebSocket:

Chat & Mensagens
Mensagens de texto curtas (tipicamente abaixo de 4 KB) têm os maiores ganhos: compressão 5–15x mais rápida.
Feeds de Dados em Tempo Real
Atualizações JSON para dashboards, cotações de ações e sensores IoT se beneficiam tanto da velocidade quanto do contexto persistente que aprende padrões repetitivos.
Gaming & Multiplayer
Atualizações de estado pequenas e frequentes se beneficiam do baixo overhead por frame.
Servidores de Alta Concorrência
Menos tempo de CPU por frame significa que o servidor consegue lidar com mais conexões simultâneas.

Totalmente Compatível

A otimização é completamente transparente — nenhuma alteração de código é necessária na sua aplicação. Os dados comprimidos transmitidos pela rede são idênticos à versão anterior, então servidores atualizados funcionam perfeitamente com clientes existentes e vice-versa.

A nova implementação suporta todas as plataformas e compiladores:

Atualize para o 2026.4.0

A otimização do permessage-deflate está disponível no sgcWebSockets 2026.4.0. Basta atualizar para a versão mais recente e suas conexões WebSocket passarão a se beneficiar automaticamente da compressão mais rápida. Baixe em esegece.com.

Agradecimentos especiais a Michael por contribuir com a implementação otimizada inicial que inspirou este trabalho. Sua pesquisa sobre contextos zlib persistentes e acesso direto à memória lançou as bases para essas melhorias de desempenho.