diff --git a/go.mod b/go.mod index ea9174a..ef06cd4 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ replace ( require ( github.com/TeaOSLab/EdgeCommon v0.0.0-00010101000000-000000000000 - github.com/andybalholm/brotli v1.0.3 + github.com/andybalholm/brotli v1.0.4 github.com/biessek/golang-ico v0.0.0-20180326222316-d348d9ea4670 github.com/cespare/xxhash v1.1.0 github.com/chai2010/webp v1.1.0 // indirect diff --git a/go.sum b/go.sum index a6e2014..c1de454 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/andybalholm/brotli v1.0.3 h1:fpcw+r1N1h0Poc1F/pHbW40cUm/lMEQslZtCkBQ0UnM= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/biessek/golang-ico v0.0.0-20180326222316-d348d9ea4670 h1:FQPKKjDhzG0T4ew6dm6MGrXb4PRAi8ZmTuYuxcF62BM= diff --git a/internal/compressions/writer_brotli.go b/internal/compressions/writer_brotli.go index 608ef0c..8d32f1d 100644 --- a/internal/compressions/writer_brotli.go +++ b/internal/compressions/writer_brotli.go @@ -19,8 +19,11 @@ func NewBrotliWriter(writer io.Writer, level int) (Writer, error) { level = brotli.BestCompression } return &BrotliWriter{ - writer: brotli.NewWriterLevel(writer, level), - level: level, + writer: brotli.NewWriterOptions(writer, brotli.WriterOptions{ + Quality: level, + LGWin: 13, // TODO 在全局设置里可以设置此值 + }), + level: level, }, nil } diff --git a/internal/compressions/writer_brotli_test.go b/internal/compressions/writer_brotli_test.go new file mode 100644 index 0000000..a56e7de --- /dev/null +++ b/internal/compressions/writer_brotli_test.go @@ -0,0 +1,90 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package compressions_test + +import ( + "bytes" + "github.com/TeaOSLab/EdgeNode/internal/compressions" + "strings" + "testing" +) + +func BenchmarkBrotliWriter_Write(b *testing.B) { + var data = []byte(strings.Repeat("A", 1024)) + + for i := 0; i < b.N; i++ { + var buf = &bytes.Buffer{} + writer, err := compressions.NewBrotliWriter(buf, 5) + if err != nil { + b.Fatal(err) + } + + for j := 0; j < 100; j++ { + _, err = writer.Write(data) + if err != nil { + b.Fatal(err) + } + + /**err = writer.Flush() + if err != nil { + b.Fatal(err) + }**/ + } + + _ = writer.Close() + } +} + + +func BenchmarkBrotliWriter_Write_Small(b *testing.B) { + var data = []byte(strings.Repeat("A", 16)) + + for i := 0; i < b.N; i++ { + var buf = &bytes.Buffer{} + writer, err := compressions.NewBrotliWriter(buf, 5) + if err != nil { + b.Fatal(err) + } + + for j := 0; j < 100; j++ { + _, err = writer.Write(data) + if err != nil { + b.Fatal(err) + } + + /**err = writer.Flush() + if err != nil { + b.Fatal(err) + }**/ + } + + _ = writer.Close() + } +} + + +func BenchmarkBrotliWriter_Write_Large(b *testing.B) { + var data = []byte(strings.Repeat("A", 4096)) + + for i := 0; i < b.N; i++ { + var buf = &bytes.Buffer{} + writer, err := compressions.NewBrotliWriter(buf, 5) + if err != nil { + b.Fatal(err) + } + + for j := 0; j < 100; j++ { + _, err = writer.Write(data) + if err != nil { + b.Fatal(err) + } + + /**err = writer.Flush() + if err != nil { + b.Fatal(err) + }**/ + } + + _ = writer.Close() + } +} \ No newline at end of file diff --git a/internal/compressions/writer_gzip_test.go b/internal/compressions/writer_gzip_test.go new file mode 100644 index 0000000..e805e42 --- /dev/null +++ b/internal/compressions/writer_gzip_test.go @@ -0,0 +1,36 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package compressions_test + +import ( + "bytes" + "github.com/TeaOSLab/EdgeNode/internal/compressions" + "strings" + "testing" +) + +func BenchmarkGzipWriter_Write(b *testing.B) { + var data = []byte(strings.Repeat("A", 1024)) + + for i := 0; i < b.N; i++ { + var buf = &bytes.Buffer{} + writer, err := compressions.NewGzipWriter(buf, 5) + if err != nil { + b.Fatal(err) + } + + for j := 0; j < 100; j++ { + _, err = writer.Write(data) + if err != nil { + b.Fatal(err) + } + + /**err = writer.Flush() + if err != nil { + b.Fatal(err) + }**/ + } + + _ = writer.Close() + } +}