From 72261eb29d7605fcb97a160612b79ab01771b601 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 31 May 2025 09:07:50 +0800 Subject: [PATCH] 1 (#63) --- reqf/Reqf.go | 16 ++++++++++++++-- reqf/Reqf_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/reqf/Reqf.go b/reqf/Reqf.go index 1e0d50b..e8663f0 100644 --- a/reqf/Reqf.go +++ b/reqf/Reqf.go @@ -97,6 +97,8 @@ type Req struct { err error callTree string copyResBuf []byte + brR *br.Reader + gzR *gzip.Reader l sync.RWMutex } @@ -274,9 +276,19 @@ func (t *Req) reqf(ctx context.Context, val Rval) (err error) { if compress_type := resp.Header[`Content-Encoding`]; len(compress_type) != 0 { switch compress_type[0] { case `br`: - resReadCloser = pio.RWC{R: br.NewReader(resp.Body).Read} + if t.brR == nil { + t.brR = br.NewReader(resp.Body) + } else { + t.brR.Reset(resp.Body) + } + resReadCloser = pio.RWC{R: t.brR.Read} case `gzip`: - resReadCloser, _ = gzip.NewReader(resp.Body) + if t.gzR == nil { + t.gzR, _ = gzip.NewReader(resp.Body) + } else { + t.gzR.Reset(resp.Body) + } + resReadCloser = t.gzR case `deflate`: resReadCloser = flate.NewReader(resp.Body) default: diff --git a/reqf/Reqf_test.go b/reqf/Reqf_test.go index 4e63159..4cf1406 100644 --- a/reqf/Reqf_test.go +++ b/reqf/Reqf_test.go @@ -309,6 +309,30 @@ func Test_req7(t *testing.T) { } } +func Benchmark_req10(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + // reuse.Reqf(Rval{ + // Url: "http://" + addr + "/br", + // }) + // reuse.Respon(func(buf []byte) error { + // if !bytes.Equal([]byte("abc强强强强"), buf) { + // b.Fail() + // } + // return nil + // }) + reuse.Reqf(Rval{ + Url: "http://" + addr + "/gzip", + }) + reuse.Respon(func(buf []byte) error { + if !bytes.Equal([]byte("abc强强强强"), buf) { + b.Error("gzip fail") + } + return nil + }) + } +} + func Test_req(t *testing.T) { reuse.Reqf(Rval{ Url: "http://" + addr + "/br", -- 2.39.2