From 6288b620df1c827a90710c552c83239eda918295 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Wed, 28 Sep 2022 14:53:58 +0200 Subject: [PATCH] Use pool for buffer --- http/middleware/gzip/gzip.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/http/middleware/gzip/gzip.go b/http/middleware/gzip/gzip.go index 066e8165..09fd6ba4 100644 --- a/http/middleware/gzip/gzip.go +++ b/http/middleware/gzip/gzip.go @@ -35,7 +35,7 @@ type gzipResponseWriter struct { wroteBody bool minLength int minLengthExceeded bool - buffer bytes.Buffer + buffer *bytes.Buffer code int } @@ -101,6 +101,7 @@ func NewWithConfig(config Config) echo.MiddlewareFunc { } pool := gzipPool(config) + bpool := bufferPool() return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { @@ -119,7 +120,11 @@ func NewWithConfig(config Config) echo.MiddlewareFunc { } rw := res.Writer w.Reset(rw) - grw := &gzipResponseWriter{Writer: w, ResponseWriter: rw, minLength: config.MinLength} + + buf := bpool.Get().(*bytes.Buffer) + buf.Reset() + + grw := &gzipResponseWriter{Writer: w, ResponseWriter: rw, minLength: config.MinLength, buffer: buf} defer func() { if !grw.wroteBody { @@ -141,6 +146,7 @@ func NewWithConfig(config Config) echo.MiddlewareFunc { w.Reset(io.Discard) } w.Close() + bpool.Put(buf) pool.Put(w) }() @@ -232,3 +238,12 @@ func gzipPool(config Config) sync.Pool { }, } } + +func bufferPool() sync.Pool { + return sync.Pool{ + New: func() interface{} { + b := &bytes.Buffer{} + return b + }, + } +}