"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تحسين أداء طلب Golang API

تحسين أداء طلب Golang API

تم النشر بتاريخ 2024-08-20
تصفح:648

Improving Golang API request performance

المشروع

لقد بدأت مؤخرًا العمل على مجمع تبادل العملات المشفرة. في الأساس، أقوم بإرسال طلبات إلى مجموعة من البورصات المختلفة ومقارنة الأسعار. وهذا يجب أن يتم في أسرع وقت ممكن. في هذه التدوينة، سأعرض بعض التعديلات التي قمت بها من أجل تعزيز أدائي بشكل ملحوظ.

ومع ذلك، ضع في اعتبارك أنني لست خبيرًا (خاصة في لعبة go) وأنا فقط أشارك النتائج التي توصلت إليها من مشروعي الشخصي.

التحسينات

تأتي هذه التحسينات في ترتيب أكبر تحسين لوقت التشغيل.

1. استخدام goroutines

في أي برنامج Go، تعد إجراءات goroutines ضرورية للسرعة. أكبر دفعة قمت بها كانت من خلال إرسال الطلبات بشكل متزامن. نظرًا لأنني بحاجة إلى إجراء ما يصل إلى 12 تبادلًا مختلفًا، فإن إرسال هذه الطلبات في نفس الوقت أدى إلى انخفاض وقت التشغيل من حوالي 24 ثانية إلى ~ 3 فقط.

Goroutines مذهلة وسهلة الاستخدام للغاية. يجب عليك تضمينها حيثما أمكن ذلك. ولكن كن حذرًا دائمًا من سباقات البيانات

2. ترقية مكتبة JSON

لقد استبدلت encoding/json بـ github.com/json-iterator/go.jsoniter هي مكتبة معالجة JSON سريعة تعمل كبديل مباشر للمكتبة القياسية، لذلك لم أضطر إلى تغيير أي كود ، مجرد تبديل مكتبة.

النتائج المعيارية

لقياس تحسينات الأداء، قمت بإجراء بعض المعايير لمقارنة التشفير/json وjsoniter. وفيما يلي ملخص للنتائج:

goos: linux
goarch: amd64
pkg: apiSpeedImprove
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkEncodingJSON-12 140383 7381 ns/op
BenchmarkJSONIter-12 974605 1217 ns/op
PASS
ok apiSpeedImprove 3.216s

لذا فإن jsoniter أسرع بنحو 6 مرات من المكتبة القياسية.

3. إعادة استخدام معالجات HTTP

لقد بدأت في إعادة استخدام معالجات HTTP بدلاً من إنشاء معالجات جديدة لكل طلب. من خلال إعداد معالج مرة واحدة وإعادة استخدامه، قمت بتقليل النفقات العامة لإنشاء معالجات جديدة لكل طلب.

النتائج المعيارية

إليك نتائج المعايير التي تقارن المعالجات المعاد استخدامها مقابل إنشاء معالجات جديدة لكل طلب:

goos: linux
goarch: amd64
pkg: apiSpeedImprove/httpReuse
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkReusedHandler-12 2179 505189 ns/op
BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op
PASS
ok apiSpeedImprove/httpReuse 7.270s

أعطت إعادة استخدام معالجات HTTP تعزيزًا طفيفًا في الأداء مقارنة بإنشاء معالج جديد لكل طلب.

خاتمة

بفضل هذه التعديلات تمكنت من تقليل الوقت المستغرق لجمع كل المعلومات من 24 ثانية في البداية إلى حوالي ثانيتين. تحسن قوي جدًا!

إذا كنت مهتمًا بالرمز الخاص بمقاييسي، فهو متاح هنا

إذا استمتعت بهذا المنشور وترغب في دعم عملي، يمكنك التبرع هنا.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/4rkal/improving-golang-api-request-performance-1ae4?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3