go-don icon indicating copy to clipboard operation
go-don copied to clipboard

feat(encoding)!: simplify encoding interface and reduce allocs

Open abemedia opened this issue 10 months ago • 2 comments

abemedia avatar Apr 01 '24 12:04 abemedia

Benchmark Results

.
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don
cpu: AMD EPYC 7763 64-Core Processor                
                         │   before    │                after                │
                         │   sec/op    │   sec/op     vs base                │
Handler/Request-4          309.2n ± 1%   251.1n ± 1%  -18.82% (p=0.000 n=10)
Handler/RequestPointer-4   330.4n ± 0%   257.2n ± 1%  -22.13% (p=0.000 n=10)
geomean                    319.6n        254.1n       -20.49%

                         │   before   │               after                │
                         │    B/op    │    B/op     vs base                │
Handler/Request-4          40.00 ± 0%   24.00 ± 0%  -40.00% (p=0.000 n=10)
Handler/RequestPointer-4   40.00 ± 0%   24.00 ± 0%  -40.00% (p=0.000 n=10)
geomean                    40.00        24.00       -40.00%

                         │   before   │               after                │
                         │ allocs/op  │ allocs/op   vs base                │
Handler/Request-4          2.000 ± 0%   1.000 ± 0%  -50.00% (p=0.000 n=10)
Handler/RequestPointer-4   2.000 ± 0%   1.000 ± 0%  -50.00% (p=0.000 n=10)
geomean                    2.000        1.000       -50.00%
encoding/json
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/json
cpu: AMD EPYC 7763 64-Core Processor                
              │   before    │                after                │
              │   sec/op    │   sec/op     vs base                │
JSON/Decode-4   89.70n ± 2%   79.64n ± 2%  -11.21% (p=0.000 n=10)
JSON/Encode-4   130.6n ± 0%   122.1n ± 5%   -6.54% (p=0.000 n=10)
geomean         108.3n        98.61n        -8.91%

              │   before   │                after                 │
              │    B/op    │    B/op     vs base                  │
JSON/Decode-4   16.00 ± 0%   16.00 ± 0%        ~ (p=1.000 n=10) ¹
JSON/Encode-4   32.00 ± 0%   16.00 ± 0%  -50.00% (p=0.000 n=10)
geomean         22.63        16.00       -29.29%
¹ all samples are equal

              │   before   │                after                 │
              │ allocs/op  │ allocs/op   vs base                  │
JSON/Decode-4   1.000 ± 0%   1.000 ± 0%        ~ (p=1.000 n=10) ¹
JSON/Encode-4   2.000 ± 0%   1.000 ± 0%  -50.00% (p=0.000 n=10)
geomean         1.414        1.000       -29.29%
¹ all samples are equal
encoding/msgpack
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/msgpack
cpu: AMD EPYC 7763 64-Core Processor                
                 │   before    │                after                │
                 │   sec/op    │   sec/op     vs base                │
Msgpack/Decode-4   289.1n ± 1%   240.9n ± 4%  -16.66% (p=0.000 n=10)
Msgpack/Encode-4   271.5n ± 0%   281.8n ± 2%   +3.79% (p=0.000 n=10)
geomean            280.1n        260.5n        -6.99%

                 │   before    │                after                 │
                 │    B/op     │    B/op     vs base                  │
Msgpack/Decode-4   51.000 ± 0%   3.000 ± 0%  -94.12% (p=0.000 n=10)
Msgpack/Encode-4    128.0 ± 0%   128.0 ± 0%        ~ (p=1.000 n=10) ¹
geomean             80.80        19.60       -75.75%
¹ all samples are equal

                 │   before   │                after                 │
                 │ allocs/op  │ allocs/op   vs base                  │
Msgpack/Decode-4   2.000 ± 0%   1.000 ± 0%  -50.00% (p=0.000 n=10)
Msgpack/Encode-4   3.000 ± 0%   3.000 ± 0%        ~ (p=1.000 n=10) ¹
geomean            2.449        1.732       -29.29%
¹ all samples are equal
encoding/protobuf
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/protobuf
cpu: AMD EPYC 7763 64-Core Processor                
                  │    before    │                after                │
                  │    sec/op    │   sec/op     vs base                │
Protobuf/Decode-4    160.7n ± 1%   140.4n ± 3%  -12.63% (p=0.000 n=10)
Protobuf/Encode-4   106.40n ± 0%   94.61n ± 4%  -11.08% (p=0.000 n=10)
geomean              130.8n        115.3n       -11.86%

                  │   before   │                after                │
                  │    B/op    │    B/op     vs base                 │
Protobuf/Decode-4   3.000 ± 0%   3.000 ± 0%       ~ (p=1.000 n=10) ¹
Protobuf/Encode-4   5.000 ± 0%   5.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean             3.873        3.873       +0.00%
¹ all samples are equal

                  │   before   │                after                │
                  │ allocs/op  │ allocs/op   vs base                 │
Protobuf/Decode-4   1.000 ± 0%   1.000 ± 0%       ~ (p=1.000 n=10) ¹
Protobuf/Encode-4   1.000 ± 0%   1.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean             1.000        1.000       +0.00%
¹ all samples are equal
encoding/text
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/text
cpu: AMD EPYC 7763 64-Core Processor                
              │   before    │                after                │
              │   sec/op    │   sec/op     vs base                │
Text/Decode-4   11.79n ± 0%   11.78n ± 1%        ~ (p=0.467 n=10)
Text/Encode-4   35.49n ± 0%   39.25n ± 2%  +10.58% (p=0.000 n=10)
geomean         20.46n        21.50n        +5.11%

              │    before    │                after                │
              │     B/op     │    B/op     vs base                 │
Text/Decode-4   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Text/Encode-4   16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                    ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

              │    before    │                after                │
              │  allocs/op   │ allocs/op   vs base                 │
Text/Decode-4   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Text/Encode-4   1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                    ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean
encoding/toml
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/toml
cpu: AMD EPYC 7763 64-Core Processor                
              │   before    │               after                │
              │   sec/op    │   sec/op     vs base               │
TOML/Decode-4   4.514µ ± 1%   4.508µ ± 3%       ~ (p=0.468 n=10)
TOML/Encode-4   1.286µ ± 0%   1.378µ ± 2%  +7.12% (p=0.000 n=10)
geomean         2.409µ        2.492µ       +3.43%

              │    before    │                 after                 │
              │     B/op     │     B/op      vs base                 │
TOML/Decode-4   11.59Ki ± 0%   11.55Ki ± 0%  -0.40% (p=0.000 n=10)
TOML/Encode-4     752.0 ± 0%     752.0 ± 0%       ~ (p=1.000 n=10) ¹
geomean         2.918Ki        2.912Ki       -0.20%
¹ all samples are equal

              │   before   │                after                │
              │ allocs/op  │ allocs/op   vs base                 │
TOML/Decode-4   36.00 ± 0%   35.00 ± 0%  -2.78% (p=0.000 n=10)
TOML/Encode-4   16.00 ± 0%   16.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean         24.00        23.66       -1.40%
¹ all samples are equal
encoding/xml
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/xml
cpu: AMD EPYC 7763 64-Core Processor                
             │   before    │                after                │
             │   sec/op    │   sec/op     vs base                │
XML/Decode-4   1.902µ ± 2%   2.724µ ± 1%  +43.22% (p=0.000 n=10)
XML/Encode-4   1.401µ ± 1%   1.424µ ± 1%   +1.68% (p=0.000 n=10)
geomean        1.632µ        1.970µ       +20.67%

             │    before    │                 after                  │
             │     B/op     │     B/op      vs base                  │
XML/Decode-4   1.070Ki ± 0%   1.297Ki ± 0%  +21.17% (p=0.000 n=10)
XML/Encode-4   4.359Ki ± 0%   4.359Ki ± 0%        ~ (p=1.000 n=10) ¹
geomean        2.160Ki        2.378Ki       +10.08%
¹ all samples are equal

             │   before   │                after                 │
             │ allocs/op  │ allocs/op   vs base                  │
XML/Decode-4   22.00 ± 0%   28.00 ± 0%  +27.27% (p=0.000 n=10)
XML/Encode-4   8.000 ± 0%   8.000 ± 0%        ~ (p=1.000 n=10) ¹
geomean        13.27        14.97       +12.82%
¹ all samples are equal
encoding/yaml
goos: linux
goarch: amd64
pkg: github.com/abemedia/go-don/encoding/yaml
cpu: AMD EPYC 7763 64-Core Processor                
              │   before    │               after                │
              │   sec/op    │   sec/op     vs base               │
YAML/Decode-4   4.845µ ± 3%   4.818µ ± 3%       ~ (p=0.072 n=10)
YAML/Encode-4   2.982µ ± 1%   3.034µ ± 3%  +1.74% (p=0.000 n=10)
geomean         3.801µ        3.823µ       +0.59%

              │    before    │                 after                 │
              │     B/op     │     B/op      vs base                 │
YAML/Decode-4   6.586Ki ± 0%   6.586Ki ± 0%       ~ (p=1.000 n=10) ¹
YAML/Encode-4   6.556Ki ± 0%   6.556Ki ± 0%       ~ (p=1.000 n=10) ¹
geomean         6.571Ki        6.571Ki       +0.00%
¹ all samples are equal

              │   before   │                after                │
              │ allocs/op  │ allocs/op   vs base                 │
YAML/Decode-4   41.00 ± 0%   41.00 ± 0%       ~ (p=1.000 n=10) ¹
YAML/Encode-4   19.00 ± 0%   19.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean         27.91        27.91       +0.00%
¹ all samples are equal

github-actions[bot] avatar Apr 01 '24 12:04 github-actions[bot]

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 98.53%. Comparing base (3f53fd0) to head (48b4280). Report is 2 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #214      +/-   ##
==========================================
+ Coverage   98.49%   98.53%   +0.03%     
==========================================
  Files          24       24              
  Lines         732      752      +20     
==========================================
+ Hits          721      741      +20     
  Misses          6        6              
  Partials        5        5              

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Apr 01 '24 12:04 codecov[bot]