"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Améliorer les performances des requêtes de l'API Golang

Améliorer les performances des requêtes de l'API Golang

Publié le 2024-08-20
Parcourir:148

Improving Golang API request performance

Le projet

J'ai récemment commencé à travailler sur un agrégateur d'échange de crypto-monnaie. Fondamentalement, j’envoie des demandes à un certain nombre d’échanges différents et je compare les tarifs. Cela doit être fait le plus rapidement possible. Dans cet article, je vais montrer quelques ajustements que j'ai apportés afin d'améliorer considérablement mes performances.

Cependant, gardez à l'esprit que je ne suis pas un expert (surtout en go) et que je partage simplement mes découvertes issues de mon propre projet personnel.

Améliorations

Ces améliorations sont classées par ordre d'amélioration du temps d'exécution.

1. Utiliser des goroutines

Dans tout programme Go, les goroutines sont essentielles à la vitesse. Le plus gros coup de pouce que j’ai apporté a été l’envoi simultané de demandes. Comme je dois accéder à 12 échanges différents, l'envoi de ces requêtes en même temps a réduit mon temps d'exécution d'environ 24 secondes à seulement ~ 3.

Les Goroutines sont étonnantes et extrêmement faciles à utiliser. Vous devez les inclure dans la mesure du possible. Mais faites toujours attention aux Data Races

2. Mise à niveau de la bibliothèque JSON

J'ai remplacé encoding/json par github.com/json-iterator/go.jsoniter est une bibliothèque de traitement JSON rapide qui fonctionne comme un remplacement instantané de la bibliothèque standard, je n'ai donc pas eu à modifier de code , juste un changement de bibliothèque.

Résultats de référence

Pour mesurer les améliorations de performances, j'ai effectué quelques tests comparant encoding/json et jsoniter. Voici un résumé des résultats :

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

Ainsi, jsoniter est environ 6 fois plus rapide que la bibliothèque standard.

3. Réutilisation des gestionnaires HTTP

J'ai commencé à réutiliser les gestionnaires HTTP au lieu d'en créer de nouveaux pour chaque requête. En configurant un gestionnaire une fois et en le réutilisant, j'ai réduit les frais généraux liés à la création de nouveaux gestionnaires pour chaque requête.

Résultats de référence

Voici les résultats des tests comparant les gestionnaires réutilisés et la création de nouveaux gestionnaires pour chaque requête :

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

La réutilisation des gestionnaires HTTP a légèrement amélioré les performances par rapport à la création d'un nouveau gestionnaire pour chaque requête.

Conclusion

Grâce à ces ajustements, j'ai réussi à réduire le temps nécessaire pour rassembler toutes les informations de 24 secondes initialement à environ 2 secondes. Amélioration assez solide !

Si le code de mes benchmarks vous intéresse, il est disponible ici

Si vous avez apprécié cet article et souhaitez soutenir mon travail, vous pouvez faire un don ici.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/4rkal/improving-golang-api-request-performance-1ae4?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3