優化Golang HTTP 檔案上傳效能的最佳實務:設定合理的記憶體限制:r.MaxMemory = 32 << 20 // 32MB儲存大型檔案時使用暫存檔案:if err := r.ParseMultipartForm(32 << 20); err != nil { ... }啟用Goroutine 並行處理:type multipartFile struct { ... }, func saveFilesConcurrently(files []multipartFile) { ... }使用壓縮演算法來減少檔案大小:import "github.com/klauspost/compress/gzip", func compressImage(file multipartFile) { ... }使用CDN、快取回應和程式碼最佳化
#如何在Golang 中使用HTTP 檔案上傳優化效能
實作案例:優化圖片上傳
設定合理的記憶體限制
r.MaxMemory = 32 << 20 // 32MB
使用臨時檔案儲存大型檔案
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() // ... }
#啟用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() }
使用壓縮演算法減少檔案大小
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 }
額外的最佳化技巧
Cache-Control
標頭對通常不會發生變化的回應進行快取。 以上是如何在 Golang 中使用 HTTP 檔案上傳優化效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!