البناء مع استبدال JSON
يستخدم Gin حزمة encoding/json من المكتبة القياسية لتسلسل وإلغاء تسلسل JSON افتراضياً. مُرمّز المكتبة القياسية مُختبر جيداً ومتوافق بالكامل، لكنه ليس الخيار الأسرع المتاح. إذا كان أداء JSON يمثل عنق زجاجة في تطبيقك — مثلاً في واجهات برمجية عالية الإنتاجية تقوم بتسلسل حمولات استجابة كبيرة — يمكنك استبداله ببديل أسرع في وقت البناء باستخدام علامات البناء. لا يلزم إجراء تغييرات في الكود.
البدائل المتاحة
يدعم Gin ثلاثة مُرمّزات JSON بديلة. كل واحد ينفّذ نفس الواجهة التي يتوقعها Gin، لذا تستمر معالجاتك ووسيطاتك ومنطق الربط في العمل دون تعديل.
go-json
go-json هو مُرمّز JSON مكتوب بالكامل بلغة Go يوفر تحسينات أداء كبيرة مقارنة بـ encoding/json مع الحفاظ على التوافق الكامل. يعمل على جميع المنصات والبنيات.
go build -tags=go_json .jsoniter
jsoniter (json-iterator) هو مكتبة JSON أخرى عالية الأداء مكتوبة بالكامل بلغة Go. متوافقة مع واجهة encoding/json البرمجية وتوفر نظام تكوين مرن لحالات الاستخدام المتقدمة.
go build -tags=jsoniter .sonic
sonic هو مُرمّز JSON فائق السرعة طوّرته ByteDance. يستخدم تجميع JIT وتعليمات SIMD لتحقيق أقصى إنتاجية، مما يجعله الخيار الأسرع بين الثلاثة.
go build -tags="sonic avx" .اختيار البديل
| المُرمّز | دعم المنصات | القوة الرئيسية |
|---|---|---|
encoding/json (الافتراضي) | الكل | أقصى توافق، بدون اعتماديات إضافية |
| go-json | الكل | تسريع جيد، Go نقي، توافق واسع |
| jsoniter | الكل | تسريع جيد، تكوين مرن |
| sonic | x86_64 مع AVX فقط | أعلى إنتاجية عبر JIT و SIMD |
لمعظم التطبيقات، يُعد go-json خياراً آمناً وفعّالاً — يعمل في كل مكان ويوفر مكاسب أداء ملموسة. اختر sonic عندما تحتاج أقصى إنتاجية JSON وخوادمك تعمل على أجهزة x86_64. اختر jsoniter إذا كنت تحتاج ميزات التكوين الخاصة به أو تستخدمه بالفعل في مكان آخر في قاعدة الكود.
التحقق من البديل
يمكنك التأكد من أن البديل نشط بمقارنة أداء التسلسل باختبار بسيط، أو بفحص جدول الرموز في الملف الثنائي:
# Build with go-jsongo build -tags=go_json -o myapp .
# Check that go-json symbols are presentgo tool nm myapp | grep goccyتعمل علامة البناء أيضاً مع أوامر Go الأخرى:
go run -tags=go_json .go test -tags=go_json ./...