تخطَّ إلى المحتوى

البناء مع استبدال JSON

يستخدم Gin حزمة encoding/json من المكتبة القياسية لتسلسل وإلغاء تسلسل JSON افتراضياً. مُرمّز المكتبة القياسية مُختبر جيداً ومتوافق بالكامل، لكنه ليس الخيار الأسرع المتاح. إذا كان أداء JSON يمثل عنق زجاجة في تطبيقك — مثلاً في واجهات برمجية عالية الإنتاجية تقوم بتسلسل حمولات استجابة كبيرة — يمكنك استبداله ببديل أسرع في وقت البناء باستخدام علامات البناء. لا يلزم إجراء تغييرات في الكود.

البدائل المتاحة

يدعم Gin ثلاثة مُرمّزات JSON بديلة. كل واحد ينفّذ نفس الواجهة التي يتوقعها Gin، لذا تستمر معالجاتك ووسيطاتك ومنطق الربط في العمل دون تعديل.

go-json

go-json هو مُرمّز JSON مكتوب بالكامل بلغة Go يوفر تحسينات أداء كبيرة مقارنة بـ encoding/json مع الحفاظ على التوافق الكامل. يعمل على جميع المنصات والبنيات.

Terminal window
go build -tags=go_json .

jsoniter

jsoniter (json-iterator) هو مكتبة JSON أخرى عالية الأداء مكتوبة بالكامل بلغة Go. متوافقة مع واجهة encoding/json البرمجية وتوفر نظام تكوين مرن لحالات الاستخدام المتقدمة.

Terminal window
go build -tags=jsoniter .

sonic

sonic هو مُرمّز JSON فائق السرعة طوّرته ByteDance. يستخدم تجميع JIT وتعليمات SIMD لتحقيق أقصى إنتاجية، مما يجعله الخيار الأسرع بين الثلاثة.

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

اختيار البديل

المُرمّزدعم المنصاتالقوة الرئيسية
encoding/json (الافتراضي)الكلأقصى توافق، بدون اعتماديات إضافية
go-jsonالكلتسريع جيد، Go نقي، توافق واسع
jsoniterالكلتسريع جيد، تكوين مرن
sonicx86_64 مع AVX فقطأعلى إنتاجية عبر JIT و SIMD

لمعظم التطبيقات، يُعد go-json خياراً آمناً وفعّالاً — يعمل في كل مكان ويوفر مكاسب أداء ملموسة. اختر sonic عندما تحتاج أقصى إنتاجية JSON وخوادمك تعمل على أجهزة x86_64. اختر jsoniter إذا كنت تحتاج ميزات التكوين الخاصة به أو تستخدمه بالفعل في مكان آخر في قاعدة الكود.

التحقق من البديل

يمكنك التأكد من أن البديل نشط بمقارنة أداء التسلسل باختبار بسيط، أو بفحص جدول الرموز في الملف الثنائي:

Terminal window
# Build with go-json
go build -tags=go_json -o myapp .
# Check that go-json symbols are present
go tool nm myapp | grep goccy

تعمل علامة البناء أيضاً مع أوامر Go الأخرى:

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