1# OjG Benchmarks
2
3Benchmarks were run from the ojg/cmd/benchmark directory with the command:
4
5```
6go run *.go
7```
8
9```
10
11Parse string/[]byte
12       json.Unmarshal           55916 ns/op    17776 B/op    334 allocs/op
13         oj.Parse               39570 ns/op    18488 B/op    429 allocs/op
14   oj-reuse.Parse               17881 ns/op     5691 B/op    364 allocs/op
15        gen.Parse               28670 ns/op    18488 B/op    429 allocs/op
16  gen-reuse.Parse               19619 ns/op     5691 B/op    364 allocs/op
17        sen.Parse               30486 ns/op    18488 B/op    431 allocs/op
18  sen-reuse.Parse               20018 ns/op     5708 B/op    366 allocs/op
19
20   oj-reuse.Parse        █████████████████████▉ 3.13
21  gen-reuse.Parse        ███████████████████▉ 2.85
22  sen-reuse.Parse        ███████████████████▌ 2.79
23        gen.Parse        █████████████▋ 1.95
24        sen.Parse        ████████████▊ 1.83
25         oj.Parse        █████████▉ 1.41
26       json.Unmarshal    ▓▓▓▓▓▓▓ 1.00
27
28Unmarshal []byte to type
29       json.Unmarshal           44513 ns/op     5944 B/op    122 allocs/op
30         oj.Unmarshal           41010 ns/op     9705 B/op    457 allocs/op
31        sen.Unmarshal           41763 ns/op     9690 B/op    457 allocs/op
32
33         oj.Unmarshal    ███████▌ 1.09
34        sen.Unmarshal    ███████▍ 1.07
35       json.Unmarshal    ▓▓▓▓▓▓▓ 1.00
36
37Tokenize
38       json.Decode              77026 ns/op    22600 B/op   1175 allocs/op
39         oj.Tokenize             7883 ns/op     1976 B/op    156 allocs/op
40        sen.Tokenize             8347 ns/op     1976 B/op    158 allocs/op
41
42         oj.Tokenize     ████████████████████████████████████████████████████████████████████▍ 9.77
43        sen.Tokenize     ████████████████████████████████████████████████████████████████▌ 9.23
44       json.Decode       ▓▓▓▓▓▓▓ 1.00
45
46Parse io.Reader
47       json.Decode              63029 ns/op    32449 B/op    344 allocs/op
48         oj.ParseReader         34289 ns/op    22583 B/op    430 allocs/op
49   oj-reuse.ParseReader         25094 ns/op     9788 B/op    365 allocs/op
50        gen.ParseReder          43859 ns/op    22585 B/op    430 allocs/op
51  gen-reuse.ParseReder          23066 ns/op     9788 B/op    365 allocs/op
52        sen.ParseReader         36991 ns/op    22585 B/op    432 allocs/op
53  sen-reuse.ParseReader         23363 ns/op     9788 B/op    367 allocs/op
54         oj.TokenizeLoad        13610 ns/op     6072 B/op    157 allocs/op
55        sen.TokenizeLoad        12485 ns/op     6072 B/op    159 allocs/op
56
57        sen.TokenizeLoad ███████████████████████████████████▎ 5.05
58         oj.TokenizeLoad ████████████████████████████████▍ 4.63
59  gen-reuse.ParseReder   ███████████████████▏ 2.73
60  sen-reuse.ParseReader  ██████████████████▉ 2.70
61   oj-reuse.ParseReader  █████████████████▌ 2.51
62         oj.ParseReader  ████████████▊ 1.84
63        sen.ParseReader  ███████████▉ 1.70
64        gen.ParseReder   ██████████  1.44
65       json.Decode       ▓▓▓▓▓▓▓ 1.00
66
67Parse chan interface{}
68       json.Parse-chan          47625 ns/op    17790 B/op    335 allocs/op
69         oj.Parse               34403 ns/op    18489 B/op    429 allocs/op
70        gen.Parse               32320 ns/op    18487 B/op    429 allocs/op
71        sen.Parse               35632 ns/op    18472 B/op    431 allocs/op
72
73        gen.Parse        ██████████▎ 1.47
74         oj.Parse        █████████▋ 1.38
75        sen.Parse        █████████▎ 1.34
76       json.Parse-chan   ▓▓▓▓▓▓▓ 1.00
77
78Validate string/[]byte
79       json.Valid               12056 ns/op        0 B/op      0 allocs/op
80         oj.Valdate              3801 ns/op        0 B/op      0 allocs/op
81
82         oj.Valdate      ██████████████████████▏ 3.17
83       json.Valid        ▓▓▓▓▓▓▓ 1.00
84
85Validate io.Reader
86       json.Decode              72646 ns/op    32449 B/op    344 allocs/op
87         oj.Valdate              7029 ns/op     4096 B/op      1 allocs/op
88
89         oj.Valdate      ████████████████████████████████████████████████████████████████████████▎ 10.34
90       json.Decode       ▓▓▓▓▓▓▓ 1.00
91
92to JSON
93       json.Marshal             48864 ns/op    17559 B/op    345 allocs/op
94         oj.JSON                 6667 ns/op        0 B/op      0 allocs/op
95        sen.SEN                  8167 ns/op        0 B/op      0 allocs/op
96
97         oj.JSON         ███████████████████████████████████████████████████▎ 7.33
98        sen.SEN          █████████████████████████████████████████▉ 5.98
99       json.Marshal      ▓▓▓▓▓▓▓ 1.00
100
101to JSON with indentation
102       json.Marshal             78762 ns/op    26978 B/op    352 allocs/op
103         oj.JSON                 7662 ns/op        0 B/op      0 allocs/op
104        sen.Bytes                9053 ns/op        0 B/op      0 allocs/op
105     pretty.JSON                62868 ns/op    36112 B/op    445 allocs/op
106     pretty.SEN                 55533 ns/op    31160 B/op    396 allocs/op
107
108         oj.JSON         ███████████████████████████████████████████████████████████████████████▉ 10.28
109        sen.Bytes        ████████████████████████████████████████████████████████████▉ 8.70
110     pretty.SEN          █████████▉ 1.42
111     pretty.JSON         ████████▊ 1.25
112       json.Marshal      ▓▓▓▓▓▓▓ 1.00
113
114to JSON with indentation and sorted keys
115         oj.JSON                13883 ns/op     2216 B/op     62 allocs/op
116        sen.Bytes               15564 ns/op     2216 B/op     62 allocs/op
117     pretty.JSON                85521 ns/op    36112 B/op    445 allocs/op
118     pretty.SEN                 64236 ns/op    31160 B/op    396 allocs/op
119
120         oj.JSON         ▓▓▓▓▓▓▓ 1.00
121        sen.Bytes        ██████▏ 0.89
122     pretty.SEN          █▌ 0.22
123     pretty.JSON         █▏ 0.16
124
125Write indented JSON
126       json.Encode              86428 ns/op    28039 B/op    353 allocs/op
127         oj.Write                7523 ns/op        0 B/op      0 allocs/op
128        sen.Write                8950 ns/op        0 B/op      0 allocs/op
129     pretty.WriteJSON           43611 ns/op    22544 B/op    441 allocs/op
130     pretty.WriteSEN            47348 ns/op    19896 B/op    392 allocs/op
131
132         oj.Write        ████████████████████████████████████████████████████████████████████████████████▍ 11.49
133        sen.Write        ███████████████████████████████████████████████████████████████████▌ 9.66
134     pretty.WriteJSON    █████████████▊ 1.98
135     pretty.WriteSEN     ████████████▊ 1.83
136       json.Encode       ▓▓▓▓▓▓▓ 1.00
137
138Marshal Struct
139       json.Marshal             11960 ns/op     3457 B/op      1 allocs/op
140         oj.Marshal              8310 ns/op     1712 B/op     44 allocs/op
141
142         oj.Marshal      ██████████  1.44
143       json.Marshal      ▓▓▓▓▓▓▓ 1.00
144
145Convert or Alter
146        alt.Generify             3275 ns/op     1664 B/op     25 allocs/op
147        alt.Alter                1695 ns/op      912 B/op     17 allocs/op
148
149        alt.Alter        █████████████▌ 1.93
150        alt.Generify     ▓▓▓▓▓▓▓ 1.00
151
152JSONPath Get $..a[2].c
153         jp.Get                239469 ns/op    19288 B/op   2227 allocs/op
154
155         jp.Get          ▓▓▓▓▓▓▓ 1.00
156
157JSONPath First  $..a[2].c
158         jp.First               22625 ns/op     2880 B/op    233 allocs/op
159
160         jp.First        ▓▓▓▓▓▓▓ 1.00
161
162 Higher values (longer bars) are better in all cases. The bar graph compares the
163 parsing performance. The lighter colored bar is the reference, usually the go
164 json package.
165
166 The Benchmarks reflect a use case where JSON is either provided as a string or
167 read from a file (io.Reader) then parsed into simple go types of nil, bool, int64
168 float64, string, []interface{}, or map[string]interface{}. When supported, an
169 io.Writer benchmark is also included along with some miscellaneous operations.
170
171Tests run on:
172 OS:              Ubuntu 20.04.2 LTS
173 Processor:       Intel(R) Core(TM) i7-8700 CPU
174 Cores:           12
175 Processor Speed: 3.20GHz
176```
177