WebSocket sıkıştırması, özellikle JSON yükleri gibi tekrarlayan verileri iletirken bant genişliğini azaltmak ve yanıt verme hızını artırmak için temel öneme sahiptir. permessage-deflate uzantısı her WebSocket çerçevesini anında sıkıştırır, ancak bu sıkıştırmanın hızı uygulamanızın aktarım hızını doğrudan etkiler.
sgcWebSockets 2026.4.0 sürümünden itibaren, permessage-deflate uygulaması önemli ölçüde daha hızlı performans için tamamen yeniden yazılmıştır. Kıyaslamalarımızda, küçük mesajlar 15 kata kadar daha hızlı sıkıştırılır ve açılır; tüm yük boyutlarında ölçülebilir kazanımlar elde edilir.
Neler Değişti?
Önceki uygulama, sıkıştırma motorunu her bir WebSocket çerçevesinde başlatıp yok ediyordu. Bu, küçük bir 1 KB'lık mesajın bile sıkıştırıcıyı kurmanın, verileri sıkıştırmanın ve ardından her şeyi sökmenin tüm maliyetini ödediği ve sonraki mesaj için tüm sürecin tekrarlandığı anlamına geliyordu.
Yeni uygulama, sıkıştırma motorunu çerçeveler arasında canlı tutar. İlk çerçeve geldiğinde bir kez başlatılır ve bağlantının ömrü boyunca yeniden kullanılır. Bu, çerçeve başına kurulum yükünü ortadan kaldırır ve ayrıca motorun önceki mesajlardan öğrenmesine olanak tanıyarak tekrarlayan veri kalıplarının daha hızlı sıkıştırılmasını sağlar.
Kalıcı sıkıştırma bağlamına ek olarak, yeni uygulama birkaç başka optimizasyon daha içerir:
- Önceden ayrılmış bellek arabellekleri, Arabellekler bir kez ayrılır ve yeniden kullanılır; bu da her çerçevede tekrarlanan bellek ayırmayı önler.
- Doğrudan bellek erişimi, Girdi zaten bellekteyken, motor onu önce ara arabelleklere kopyalamadan doğrudan okur.
- Yeniden kullanılan geçici akışlar, Dahili çalışma akışları, her sıkıştırma/açma çağrısında oluşturulup yok edilmek yerine yapıcıda bir kez oluşturulur.
Kıyaslama Sonuçları
Her mesaj boyutu için 10.000 sıkıştırma + açma turu çalıştırdık. Her tur, bir JSON yükünü sıkıştırır ve ardından çıktının orijinalle eşleştiğini doğrulayarak geri açar. Test, Delphi 12 Athens ile derlenmiş bir Windows 64-bit makinede gerçekleştirildi.
Varsayılan Yapılandırma (kalıcı bağlam)
Bu, sıkıştırma bağlamının çerçeveler arasında korunduğu varsayılan moddur; en yaygın gerçek dünya senaryosudur:
| Mesaj Boyutu | Önceki (ms) | Yeni (ms) | Hızlanma |
|---|---|---|---|
| 1 KB | 437 ms | 28 ms | 15,6 kat daha hızlı |
| 4 KB | 480 ms | 88 ms | 5,5 kat daha hızlı |
| 16 KB | 546 ms | 431 ms | 1,3 kat daha hızlı |
| 64 KB | 1,994 ms | 1,725 ms | 1,2 kat daha hızlı |
NoContextTakeOver ile (bağımsız çerçeveler)
NoContextTakeOver etkinleştirildiğinde, her çerçeve bağımsız olarak sıkıştırılır. Bu modda bile, arabellek yeniden kullanımı ve doğrudan bellek erişimi optimizasyonları sağlam bir iyileştirme sağlar:
| Mesaj Boyutu | Önceki (ms) | Yeni (ms) | Hızlanma |
|---|---|---|---|
| 1 KB | 149 ms | 75 ms | 2,0 kat daha hızlı |
| 4 KB | 173 ms | 100 ms | 1,7 kat daha hızlı |
| 16 KB | 302 ms | 228 ms | 1,3 kat daha hızlı |
| 64 KB | 1,216 ms | 1,094 ms | 1,1 kat daha hızlı |
En Çok Kim Yararlanır?
İyileştirme, çok sayıda küçük mesaj alışverişi yapan uygulamalar için en çarpıcı olanıdır; bu da tam olarak tipik WebSocket kullanım senaryosudur:
|
Sohbet & Mesajlaşma Kısa metin mesajları (genellikle 4 KB altında) en büyük kazanımları görür: 5–15 kat daha hızlı sıkıştırma. |
Gerçek Zamanlı Veri Akışları Gösterge panoları, borsa kayanyazıları ve IoT sensörleri için JSON güncellemeleri hem hızdan hem de tekrarlayan kalıpları öğrenen kalıcı bağlamdan yararlanır. |
|
Oyun & Çok Oyunculu Sık küçük durum güncellemeleri, düşük çerçeve başına yükten yararlanır. |
Yüksek Eşzamanlılıklı Sunucular Çerçeve başına daha az CPU süresi, sunucunun daha fazla eşzamanlı bağlantıyı işleyebileceği anlamına gelir. |
Tam Uyumlu
Optimizasyon tamamen şeffaftır; uygulamanızda herhangi bir kod değişikliği gerekmez. Hat üzerindeki sıkıştırılmış veriler önceki sürümle aynıdır; bu nedenle yükseltilmiş sunucular mevcut istemcilerle sorunsuz çalışır ve tersi de geçerlidir.
Yeni uygulama tüm platformları ve derleyicileri destekler:
- Delphi 7'den Delphi 13'e kadar (C++Builder dahil)
- Windows, macOS, Linux, Android, iOS
- 32-bit ve 64-bit hedefler
2026.4.0 Sürümüne Yükseltin
permessage-deflate optimizasyonu sgcWebSockets 2026.4.0 sürümünde mevcuttur. En son sürüme güncellemeniz yeterlidir; WebSocket bağlantılarınız otomatik olarak daha hızlı sıkıştırmadan yararlanacaktır. esegece.com adresinden indirin.
Bu çalışmaya ilham veren ilk optimize edilmiş uygulamaya katkıda bulunduğu için Michael'a özel teşekkürler. Kalıcı zlib bağlamları ve doğrudan bellek erişimi üzerine yaptığı araştırma, bu performans iyileştirmelerinin temelini attı.
