]> 127.0.0.1 Git - part/.git/commitdiff
1 (#63) v0.28.20250531010809
authorqydysky <qydysky@foxmail.com>
Sat, 31 May 2025 01:07:50 +0000 (09:07 +0800)
committerGitHub <noreply@github.com>
Sat, 31 May 2025 01:07:50 +0000 (09:07 +0800)
reqf/Reqf.go
reqf/Reqf_test.go

index 1e0d50bc59e1dc50c9788548dc2b5596bdbcf85a..e8663f022543a72022a0945c2410e9fda490da92 100644 (file)
@@ -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:
index 4e63159c72456c011dff6ddfd634cfdeb79a33ab..4cf1406de2470709f1c475d0f868f11c6615e444 100644 (file)
@@ -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",