Maison > développement back-end > Golang > le corps du texte

Explication détaillée des techniques de test de performances et d'optimisation dans le framework Gin

WBOY
Libérer: 2023-06-23 09:15:49
original
2642 Les gens l'ont consulté

Le framework Gin est un framework web léger basé sur le langage Go. Il est efficace, rapide et simple à utiliser, et dispose d'une large gamme d'applications dans de nombreux domaines. Cependant, dans le développement commercial quotidien, les tests de performances et les techniques d'optimisation du framework Gin ne sont pas faciles. Cet article vous le présentera en détail.

1. Tests de performances du framework Gin

  1. Outils de tests de stress

Avant d'effectuer des tests de performances, vous devez d'abord préparer les outils de test correspondants. Voici deux outils de tests de stress couramment utilisés recommandés : ApacheBench et wrk.

ApacheBench est un simple outil de test de performances HTTP lancé par Apache Software Foundation. Il est très simple et facile à utiliser et peut tester les performances d'une requête unique ou de requêtes simultanées. Il peut être installé à l'aide de la commande suivante :

sudo apt-get update
sudo apt-get install apache2-utils
Copier après la connexion

wrk est un outil de test de performances HTTP efficace, qui prend en charge les requêtes HTTP personnalisées et peut être utilisé pour tester les performances et la latence de réponse des requêtes simultanées. Il peut être installé à l'aide de la commande suivante :

sudo apt-get update
sudo apt-get install wrk
Copier après la connexion
  1. Processus de test

Avant d'effectuer des tests de performances, il est recommandé de comprendre le flux de travail de base et la structure du code du framework Gin, ce qui aidera à mieux comprendre et analyser les résultats des tests. . Testez la structure du code, la qualité du code et le contrôle des processus du framework Gin.

Lorsque vous effectuez des tests de performances, vous devez d'abord définir un itinéraire simple, puis effectuer un test de résistance sur l'itinéraire. Voici un exemple simple :

import (
 "github.com/gin-gonic/gin"
 "net/http"
)

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.String(http.StatusOK, "Hello, World!")
 })
 r.Run()
}
Copier après la connexion

Utilisez l'outil de ligne de commande du serveur Apache pour tester 500 requêtes simultanées :

$ ab -c 500 -n 500 http://localhost:8080/
Copier après la connexion

Utilisez l'outil de ligne de commande wrk pour tester 500 requêtes simultanées :

$ wrk -c 500 -t 500 -d 10s http://localhost:8080/
Copier après la connexion

2. Compétences d'optimisation du framework Gin

  1. Utilisez GOMAXPROCS

GOMAXPROCS représente le nombre maximum de planificateurs pour le programme Go, ce qui affectera les performances simultanées du programme. Par défaut, la valeur de GOMAXPROCS est égale au nombre de cœurs de processeur sur la machine, qui peut être défini en utilisant l'instruction suivante dans le programme :

runtime.GOMAXPROCS(numCPUs)
Copier après la connexion

numCPUs indique le nombre de planificateurs à définir. dépasser le nombre de cœurs de processeur sur la machine, sinon cela affectera les performances du programme.

  1. Réduire l'allocation de mémoire

L'allocation de mémoire est un problème important dans le langage Go car elle peut conduire à un "garbage collection (GC)", et GC peut réduire les performances du programme. Par conséquent, réduire l’allocation de mémoire dans le framework Gin est l’une des clés de l’optimisation des performances.

La technique classique d'allocation de mémoire consiste à utiliser sync.Pool, ce qui peut éviter dans une certaine mesure d'allouer trop de mémoire sur le tas. Voici un exemple :

var bufPool = sync.Pool{
 New: func() interface{} {
  return new(bytes.Buffer)
 },
}

func handler(w http.ResponseWriter, r *http.Request) {
 buf := bufPool.Get().(*bytes.Buffer)
 buf.Reset()
 defer bufPool.Put(buf)
 // ...
}
Copier après la connexion

Avant d'exécuter la fonction de gestionnaire, sync.Pool vérifiera s'il existe un tampon disponible, et si c'est le cas, l'utilisera directement, sinon il créera un nouveau tampon. Une fois l’exécution de la fonction terminée, le tampon est vidé et remis dans le pool de tampons.

  1. Réduire la création d'objets

Dans le framework Gin, la création d'objets est également l'une des raisons pouvant provoquer le garbage collection. Par conséquent, réduire la création d’objets est également très important pour les performances de votre programme. Voici quelques méthodes courantes pour réduire la création d'objets :

  • Utilisez le regroupement d'objets de structure, qui peut être réalisé en stockant des objets dans une tranche :
// 定义结构体类型
type Request struct {
 // ...
}

// 初始化切片
var requestsPool = make(chan *Request, 1000)

func getRequest() *Request {
 select {
 case r := <-requestsPool:
  return r
 default:
  return new(Request)
 }
}

func putRequest(req *Request) {
 select {
 case requestsPool <- req:
 default:
 }
}

// 使用请求对象
func handler(w http.ResponseWriter, r *http.Request) {
 req := getRequest()
 defer putRequest(req)
 // ...
}
Copier après la connexion

Avant d'exécuter la fonction de gestionnaire, la fonction récupèrera les objets disponibles de la tranche. Objet de requête, si aucun objet n'est disponible, un nouvel objet sera créé. Une fois la fonction exécutée, l'objet Request sera effacé et remis dans la tranche.

  • Ne créez pas d'objets en boucles. La création d'objets à l'intérieur d'une boucle peut entraîner une allocation de mémoire et un garbage collection importants, il est donc recommandé de créer tous les objets qui peuvent être nécessaires en dehors de la boucle.
  1. Sortie des journaux dans des fichiers

Pendant le développement quotidien, les informations des journaux sont généralement affichées dans la console, mais cela peut affecter les performances du programme. Par conséquent, il est recommandé de générer le journal dans un fichier, ce qui peut être réalisé par l'instruction suivante :

f, _ := os.Create("/var/log/gin.log")
gin.DefaultWriter = io.MultiWriter(f)
Copier après la connexion

L'instruction ci-dessus affichera le journal dans le fichier /var/log/gin.log et l'affichera sur la console et déposer. Cela garantit que le programme n'a besoin d'accéder au fichier qu'une seule fois lors de la sortie des informations du journal et réduit la consommation de performances du programme lors de l'accès à la console.

  1. Mise en cache des fichiers statiques

Dans le framework Gin, vous pouvez utiliser un middleware de fichiers statiques pour mettre en cache les CSS, JS, images et autres fichiers statiques, ce qui peut améliorer considérablement les performances du programme car cela peut éviter de recharger les fichiers statiques.

Ce qui suit est un exemple :

r.Use(static.Serve("/", static.LocalFile("/var/www/html", true)))
Copier après la connexion

L'instruction ci-dessus met en cache localement tous les fichiers statiques du répertoire /var/www/html et les charge automatiquement à chaque requête. Cela peut réduire efficacement le trafic réseau et la charge du serveur.

Résumé

En tant que framework web efficace, rapide et facile à utiliser, le framework Gin est largement utilisé dans le développement quotidien. Cependant, les tests de performances et les techniques d'optimisation du framework Gin ne sont pas faciles et vous devez bien comprendre ses principes et son flux de travail. Cet article présente en détail les techniques de test de performances et d'optimisation du framework Gin, dans l'espoir d'aider les développeurs à mieux utiliser le framework Gin, à optimiser les performances du programme et à améliorer l'expérience utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal