WebSocket-compressie is essentieel om bandbreedte te besparen en de responsiviteit te verbeteren, vooral bij het versturen van repetitieve data zoals JSON-payloads. De permessage-deflate-extensie comprimeert elk WebSocket-frame on the fly — maar de snelheid van die compressie heeft direct invloed op de doorvoer van je toepassing.
Vanaf sgcWebSockets 2026.4.0 is de permessage-deflate-implementatie volledig herschreven voor aanzienlijk betere prestaties. In onze benchmarks comprimeren en decomprimeren kleine berichten tot 15x sneller, met meetbare winst voor alle payload-groottes.
Wat is er veranderd?
De vorige implementatie initialiseerde en vernietigde de compressie-engine bij elk afzonderlijk WebSocket-frame. Dit betekende dat zelfs een kleinbericht van 1 KB de volledige kosten betaalde van het opzetten van de compressor, het comprimeren van de data en het weer afbreken — alleen om het hele proces te herhalen voor het volgende bericht.
De nieuwe implementatie houdt de compressie-engine in leven tussen frames door. Hij wordt één keer geïnitialiseerd bij het eerste frame en hergebruikt gedurende de hele levensduur van de verbinding. Dit elimineert de per-frame-setupkosten en stelt de engine ook in staat te leren van eerdere berichten, wat leidt tot snellere compressie van repetitieve datapatronen.
Naast de persistente compressiecontext bevat de nieuwe implementatie verschillende andere optimalisaties:
- Vooraf gealloceerde geheugen-buffers — buffers worden één keer toegewezen en hergebruikt, waardoor herhaalde geheugentoewijzing per frame wordt vermeden.
- Directe geheugentoegang — wanneer de invoer al in het geheugen staat, leest de engine deze rechtstreeks zonder eerst naar tussenliggende buffers te kopiëren.
- Hergebruikte tijdelijke streams — interne werkstreams worden één keer in de constructor aangemaakt in plaats van bij elke compress-/decompress-aanroep aan- en afgebroken.
Benchmark-resultaten
We voerden 10.000 compress + decompress-round-trips uit voor elke berichtgrootte. Elke round-trip comprimeert een JSON-payload en decomprimeert die weer, waarbij wordt geverifieerd dat de uitvoer overeenkomt met het origineel. De test is uitgevoerd op een Windows-64-bit-machine, gecompileerd met Delphi 12 Athens.
Standaardconfiguratie (persistente context)
Dit is de standaardmodus waarin de compressie-context tussen frames wordt behouden — het meest voorkomende scenario in de praktijk:
| Berichtgrootte | Vorig (ms) | Nieuw (ms) | Snelheidswinst |
|---|---|---|---|
| 1 KB | 437 ms | 28 ms | 15,6x sneller |
| 4 KB | 480 ms | 88 ms | 5,5x sneller |
| 16 KB | 546 ms | 431 ms | 1,3x sneller |
| 64 KB | 1.994 ms | 1.725 ms | 1,2x sneller |
Met NoContextTakeOver (onafhankelijke frames)
Wanneer NoContextTakeOver is ingeschakeld, wordt elk frame onafhankelijk gecomprimeerd. Zelfs in deze modus bieden de buffer-hergebruik- en directe-geheugentoegang-optimalisaties een solide verbetering:
| Berichtgrootte | Vorig (ms) | Nieuw (ms) | Snelheidswinst |
|---|---|---|---|
| 1 KB | 149 ms | 75 ms | 2,0x sneller |
| 4 KB | 173 ms | 100 ms | 1,7x sneller |
| 16 KB | 302 ms | 228 ms | 1,3x sneller |
| 64 KB | 1.216 ms | 1.094 ms | 1,1x sneller |
Wie profiteert het meest?
De verbetering is het meest dramatisch voor toepassingen die veel kleine berichten uitwisselen — precies de typische WebSocket-use-case:
|
Chat & messaging Korte tekstberichten (meestal onder 4 KB) zien de grootste winst: 5–15x snellere compressie. |
Realtime-datafeeds JSON-updates voor dashboards, koers-tickers en IoT-sensoren profiteren zowel van de snelheid als van de persistente context die repetitieve patronen leert. |
|
Gaming & multiplayer Frequente kleine state-updates profiteren van de lage per-frame-overhead. |
High-concurrency-servers Minder CPU-tijd per frame betekent dat de server meer gelijktijdige verbindingen aankan. |
Volledig compatibel
De optimalisatie is volledig transparant — je hoeft geen code-wijzigingen aan te brengen in je toepassing. De gecomprimeerde data op de lijn is identiek aan de vorige versie, dus ge-upgrade servers werken naadloos met bestaande clients en vice versa.
De nieuwe implementatie ondersteunt alle platforms en compilers:
- Delphi 7 tot en met Delphi 13 (inclusief C++Builder)
- Windows, macOS, Linux, Android, iOS
- 32-bit- en 64-bit-targets
Upgraden naar 2026.4.0
De permessage-deflate-optimalisatie is beschikbaar in sgcWebSockets 2026.4.0. Werk simpelweg bij naar de laatste versie en je WebSocket-verbindingen profiteren automatisch van snellere compressie. Download op esegece.com.
Speciale dank aan Michael voor het bijdragen van de oorspronkelijke geoptimaliseerde implementatie die dit werk inspireerde. Zijn onderzoek naar persistente zlib-contexten en directe geheugentoegang legde de basis voor deze prestatieverbeteringen.
