Maison  >  Article  >  développement back-end  >  Comment optimiser les performances en utilisant le téléchargement de fichiers HTTP dans Golang ?

Comment optimiser les performances en utilisant le téléchargement de fichiers HTTP dans Golang ?

PHPz
PHPzoriginal
2024-06-04 14:16:05866parcourir

Meilleures pratiques pour optimiser les performances de téléchargement de fichiers HTTP Golang : définissez des limites de mémoire raisonnables : r.MaxMemory = 32 << 20 // 32 Mo Utilisez des fichiers temporaires lors du stockage de fichiers volumineux : if err := r.ParseMultipartForm(32 < < 20); err != nil { ... } Activer le traitement simultané Goroutine : tapez multipartFile struct { ... }, func saveFilesConcurrently(files []multipartFile) { ... } Utilisez l'algorithme de compression pour réduire la taille du fichier : import "github .com/klauspost/compress/gzip", func compressImage(file multipartFile) { ... }Utilisation du CDN, des réponses mises en cache et de l'optimisation du code

如何在 Golang 中使用 HTTP 文件上传优化性能?

Comment optimiser les performances à l'aide du téléchargement de fichiers HTTP dans Golang

Pratique cas : Optimiser le téléchargement d'images

Définir des limites de mémoire raisonnables

r.MaxMemory = 32 << 20 // 32MB

Utiliser des fichiers temporaires pour stocker des fichiers volumineux

if err := r.ParseMultipartForm(32 << 20); err != nil {
    return // 处理错误
}
for _, file := range r.MultipartForm.File["images"] {
    f, err := os.CreateTemp("", "image-*.jpg")
    if err != nil {
        return // 处理错误
    }
    if _, err := io.Copy(f, file); err != nil {
        return // 处理错误
    }
    f.Close()
    // ...
}

Activer le traitement simultané Goroutine

type multipartFile struct {
    *multipart.FileHeader
    *os.File
}

func saveFilesConcurrently(files []multipartFile) {
    var wg sync.WaitGroup
    for _, file := range files {
        wg.Add(1)
        go func(f multipartFile) {
            defer wg.Done()
            // ...
        }(file)
    }
    wg.Wait()
}

Utiliser un algorithme de compression pour réduire la taille du fichier

import "github.com/klauspost/compress/gzip"

func compressImage(file multipartFile) (*os.File, error) {
    compressed, err := os.CreateTemp("", "image-*.jpg.gz")
    if err != nil {
        return nil, err
    }
    c := gzip.NewWriter(compressed)
    if _, err := io.Copy(c, file); err != nil {
        return nil, err
    }
    c.Close()
    return compressed, nil
}

Conseils d'optimisation supplémentaires

  • Utilisez un CDN : Le stockage de fichiers statiques sur un CDN peut réduire la charge du serveur.
  • Réponses en cache : Utilisez l'en-tête Cache-Control pour mettre en cache les réponses qui ne changent généralement pas.
  • Optimisation du code : Utilisez des outils d'analyse des performances pour identifier et éliminer les goulots d'étranglement.

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!

Déclaration:
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