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:
- Buffers de memória pré-alocados — Buffers são alocados uma vez e reutilizados, evitando alocação de memória repetida em cada frame.
- Acesso direto à memória — Quando a entrada já está na memória, o motor a lê diretamente sem copiá-la para buffers intermediários primeiro.
- Streams temporários reutilizados — Streams de trabalho internos são criados uma vez no construtor em vez de serem criados e destruídos a cada chamada de compressão/descompressão.
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:
- Delphi 7 até Delphi 13 (incluindo C++Builder)
- Windows, macOS, Linux, Android, iOS
- Targets 32-bit e 64-bit
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.
