İçeriğe geç

JSON yerine alternatif ile derleme

Gin, varsayılan olarak JSON serileştirme ve deserileştirme için standart kütüphane encoding/json paketini kullanır. Standart kütüphane kodlayıcısı iyi test edilmiş ve tamamen uyumludur, ancak mevcut en hızlı seçenek değildir. JSON performansı uygulamanızda bir darboğaz oluşturuyorsa — örneğin, büyük yanıt yükleri serileştiren yüksek verimli API’lerde — derleme etiketlerini kullanarak derleme zamanında daha hızlı bir yerine geçen alternatif kullanabilirsiniz. Kod değişikliği gerekmez.

Kullanılabilir alternatifler

Gin, üç alternatif JSON kodlayıcısını destekler. Her biri Gin’in beklediği aynı arayüzü uygular, bu nedenle işleyicileriniz, ara katmanlarınız ve bağlama mantığınız herhangi bir değişiklik olmadan çalışmaya devam eder.

go-json

go-json, tam uyumluluk sağlarken encoding/json üzerinde önemli performans iyileştirmeleri sunan saf Go JSON kodlayıcısıdır. Tüm platformlarda ve mimarilerde çalışır.

Terminal window
go build -tags=go_json .

jsoniter

jsoniter (json-iterator), encoding/json ile API uyumlu olan ve gelişmiş kullanım senaryoları için esnek bir yapılandırma sistemi sunan başka bir saf Go, yüksek performanslı JSON kütüphanesidir.

Terminal window
go build -tags=jsoniter .

sonic

sonic, ByteDance tarafından geliştirilen son derece hızlı bir JSON kodlayıcısıdır. Maksimum verim elde etmek için JIT derleme ve SIMD komutlarını kullanır, bu da onu üç seçenek arasında en hızlı yapar.

Terminal window
go build -tags="sonic avx" .

Alternatif seçme

KodlayıcıPlatform desteğiTemel güç
encoding/json (varsayılan)TümüMaksimum uyumluluk, ek bağımlılık yok
go-jsonTümüİyi hız artışı, saf Go, geniş uyumluluk
jsoniterTümüİyi hız artışı, esnek yapılandırma
sonicYalnızca AVX’li x86_64JIT ve SIMD ile en yüksek verim

Çoğu uygulama için go-json güvenli ve etkili bir seçimdir — her yerde çalışır ve anlamlı performans kazanımları sağlar. Maksimum JSON verimi gerektiğinde ve sunucularınız x86_64 donanımında çalışıyorsa sonic’i seçin. Özel yapılandırma özelliklerine ihtiyacınız varsa veya kod tabanınızda zaten kullanıyorsanız jsoniter’ı seçin.

Alternatifi doğrulama

Serileştirme performansını basit bir karşılaştırma ile veya ikili dosyanın sembol tablosunu kontrol ederek alternatifin aktif olduğunu doğrulayabilirsiniz:

Terminal window
# go-json ile derleme
go build -tags=go_json -o myapp .
# go-json sembollerinin mevcut olduğunu kontrol etme
go tool nm myapp | grep goccy

Derleme etiketi diğer Go komutlarıyla da çalışır:

Terminal window
go run -tags=go_json .
go test -tags=go_json ./...