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