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.
Ces améliorations sont classées par ordre d'amélioration du temps d'exécution.
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
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.
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.
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.
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