Skip to content

Commit f7eceb1

Browse files
authored
Merge pull request #254 from goccy/feature/add-sonic-to-benchmark
Add bytedance/sonic to benchmark target
2 parents 4f9edb7 + 291234a commit f7eceb1

File tree

4 files changed

+164
-59
lines changed

4 files changed

+164
-59
lines changed

benchmarks/decode_test.go

Lines changed: 89 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"testing"
77

8+
"github.com/bytedance/sonic"
89
gojay "github.com/francoispqt/gojay"
910
gojson "github.com/goccy/go-json"
1011
jsoniter "github.com/json-iterator/go"
@@ -33,41 +34,51 @@ func Benchmark_Decode_SmallStruct_Unmarshal_FastJson(b *testing.B) {
3334
}
3435
}
3536

36-
func Benchmark_Decode_SmallStruct_Unmarshal_JsonIter(b *testing.B) {
37+
func Benchmark_Decode_SmallStruct_Unmarshal_SegmentioJson(b *testing.B) {
3738
b.ReportAllocs()
3839
for n := 0; n < b.N; n++ {
3940
result := SmallPayload{}
40-
if err := jsoniter.Unmarshal(SmallFixture, &result); err != nil {
41+
if err := segmentiojson.Unmarshal(SmallFixture, &result); err != nil {
4142
b.Fatal(err)
4243
}
4344
}
4445
}
4546

46-
func Benchmark_Decode_SmallStruct_Unmarshal_GoJay(b *testing.B) {
47+
func Benchmark_Decode_SmallStruct_Unmarshal_Sonic(b *testing.B) {
4748
b.ReportAllocs()
4849
for n := 0; n < b.N; n++ {
4950
result := SmallPayload{}
50-
if err := gojay.UnmarshalJSONObject(SmallFixture, &result); err != nil {
51+
if err := sonic.Unmarshal(SmallFixture, &result); err != nil {
5152
b.Fatal(err)
5253
}
5354
}
5455
}
5556

56-
func Benchmark_Decode_SmallStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
57+
func Benchmark_Decode_SmallStruct_Unmarshal_JsonIter(b *testing.B) {
5758
b.ReportAllocs()
58-
for i := 0; i < b.N; i++ {
59+
for n := 0; n < b.N; n++ {
5960
result := SmallPayload{}
60-
if err := gojay.Unsafe.UnmarshalJSONObject(SmallFixture, &result); err != nil {
61+
if err := jsoniter.Unmarshal(SmallFixture, &result); err != nil {
6162
b.Fatal(err)
6263
}
6364
}
6465
}
6566

66-
func Benchmark_Decode_SmallStruct_Unmarshal_SegmentioJson(b *testing.B) {
67+
func Benchmark_Decode_SmallStruct_Unmarshal_GoJay(b *testing.B) {
6768
b.ReportAllocs()
6869
for n := 0; n < b.N; n++ {
6970
result := SmallPayload{}
70-
if err := segmentiojson.Unmarshal(SmallFixture, &result); err != nil {
71+
if err := gojay.UnmarshalJSONObject(SmallFixture, &result); err != nil {
72+
b.Fatal(err)
73+
}
74+
}
75+
}
76+
77+
func Benchmark_Decode_SmallStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
78+
b.ReportAllocs()
79+
for i := 0; i < b.N; i++ {
80+
result := SmallPayload{}
81+
if err := gojay.Unsafe.UnmarshalJSONObject(SmallFixture, &result); err != nil {
7182
b.Fatal(err)
7283
}
7384
}
@@ -105,37 +116,37 @@ func Benchmark_Decode_SmallStruct_Stream_EncodingJson(b *testing.B) {
105116
}
106117
}
107118

108-
func Benchmark_Decode_SmallStruct_Stream_JsonIter(b *testing.B) {
119+
func Benchmark_Decode_SmallStruct_Stream_SegmentioJson(b *testing.B) {
109120
b.ReportAllocs()
110121
reader := bytes.NewReader(SmallFixture)
111122
for i := 0; i < b.N; i++ {
112123
result := SmallPayload{}
113124
reader.Reset(SmallFixture)
114-
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
125+
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
115126
b.Fatal(err)
116127
}
117128
}
118129
}
119130

120-
func Benchmark_Decode_SmallStruct_Stream_GoJay(b *testing.B) {
131+
func Benchmark_Decode_SmallStruct_Stream_JsonIter(b *testing.B) {
121132
b.ReportAllocs()
122133
reader := bytes.NewReader(SmallFixture)
123-
for n := 0; n < b.N; n++ {
124-
reader.Reset(SmallFixture)
134+
for i := 0; i < b.N; i++ {
125135
result := SmallPayload{}
126-
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
136+
reader.Reset(SmallFixture)
137+
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
127138
b.Fatal(err)
128139
}
129140
}
130141
}
131142

132-
func Benchmark_Decode_SmallStruct_Stream_SegmentioJson(b *testing.B) {
143+
func Benchmark_Decode_SmallStruct_Stream_GoJay(b *testing.B) {
133144
b.ReportAllocs()
134145
reader := bytes.NewReader(SmallFixture)
135-
for i := 0; i < b.N; i++ {
136-
result := SmallPayload{}
146+
for n := 0; n < b.N; n++ {
137147
reader.Reset(SmallFixture)
138-
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
148+
result := SmallPayload{}
149+
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
139150
b.Fatal(err)
140151
}
141152
}
@@ -174,41 +185,51 @@ func Benchmark_Decode_MediumStruct_Unmarshal_FastJson(b *testing.B) {
174185
}
175186
}
176187

177-
func Benchmark_Decode_MediumStruct_Unmarshal_JsonIter(b *testing.B) {
188+
func Benchmark_Decode_MediumStruct_Unmarshal_Sonic(b *testing.B) {
178189
b.ReportAllocs()
179-
for n := 0; n < b.N; n++ {
190+
for i := 0; i < b.N; i++ {
180191
result := MediumPayload{}
181-
if err := jsoniter.Unmarshal(MediumFixture, &result); err != nil {
192+
if err := sonic.Unmarshal(MediumFixture, &result); err != nil {
182193
b.Fatal(err)
183194
}
184195
}
185196
}
186197

187-
func Benchmark_Decode_MediumStruct_Unmarshal_GoJay(b *testing.B) {
198+
func Benchmark_Decode_MediumStruct_Unmarshal_SegmentioJson(b *testing.B) {
199+
b.ReportAllocs()
200+
for i := 0; i < b.N; i++ {
201+
result := MediumPayload{}
202+
if err := segmentiojson.Unmarshal(MediumFixture, &result); err != nil {
203+
b.Fatal(err)
204+
}
205+
}
206+
}
207+
208+
func Benchmark_Decode_MediumStruct_Unmarshal_JsonIter(b *testing.B) {
188209
b.ReportAllocs()
189210
for n := 0; n < b.N; n++ {
190211
result := MediumPayload{}
191-
if err := gojay.UnmarshalJSONObject(MediumFixture, &result); err != nil {
212+
if err := jsoniter.Unmarshal(MediumFixture, &result); err != nil {
192213
b.Fatal(err)
193214
}
194215
}
195216
}
196217

197-
func Benchmark_Decode_MediumStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
218+
func Benchmark_Decode_MediumStruct_Unmarshal_GoJay(b *testing.B) {
198219
b.ReportAllocs()
199-
for i := 0; i < b.N; i++ {
220+
for n := 0; n < b.N; n++ {
200221
result := MediumPayload{}
201-
if err := gojay.Unsafe.UnmarshalJSONObject(MediumFixture, &result); err != nil {
222+
if err := gojay.UnmarshalJSONObject(MediumFixture, &result); err != nil {
202223
b.Fatal(err)
203224
}
204225
}
205226
}
206227

207-
func Benchmark_Decode_MediumStruct_Unmarshal_SegmentioJson(b *testing.B) {
228+
func Benchmark_Decode_MediumStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
208229
b.ReportAllocs()
209230
for i := 0; i < b.N; i++ {
210231
result := MediumPayload{}
211-
if err := segmentiojson.Unmarshal(MediumFixture, &result); err != nil {
232+
if err := gojay.Unsafe.UnmarshalJSONObject(MediumFixture, &result); err != nil {
212233
b.Fatal(err)
213234
}
214235
}
@@ -246,37 +267,37 @@ func Benchmark_Decode_MediumStruct_Stream_EncodingJson(b *testing.B) {
246267
}
247268
}
248269

249-
func Benchmark_Decode_MediumStruct_Stream_JsonIter(b *testing.B) {
270+
func Benchmark_Decode_MediumStruct_Stream_SegmentioJson(b *testing.B) {
250271
b.ReportAllocs()
251272
reader := bytes.NewReader(MediumFixture)
252-
for i := 0; i < b.N; i++ {
253-
result := MediumPayload{}
273+
for n := 0; n < b.N; n++ {
254274
reader.Reset(MediumFixture)
255-
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
275+
result := MediumPayload{}
276+
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
256277
b.Fatal(err)
257278
}
258279
}
259280
}
260281

261-
func Benchmark_Decode_MediumStruct_Stream_GoJay(b *testing.B) {
282+
func Benchmark_Decode_MediumStruct_Stream_JsonIter(b *testing.B) {
262283
b.ReportAllocs()
263284
reader := bytes.NewReader(MediumFixture)
264-
for n := 0; n < b.N; n++ {
265-
reader.Reset(MediumFixture)
285+
for i := 0; i < b.N; i++ {
266286
result := MediumPayload{}
267-
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
287+
reader.Reset(MediumFixture)
288+
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
268289
b.Fatal(err)
269290
}
270291
}
271292
}
272293

273-
func Benchmark_Decode_MediumStruct_Stream_SegmentioJson(b *testing.B) {
294+
func Benchmark_Decode_MediumStruct_Stream_GoJay(b *testing.B) {
274295
b.ReportAllocs()
275296
reader := bytes.NewReader(MediumFixture)
276297
for n := 0; n < b.N; n++ {
277298
reader.Reset(MediumFixture)
278299
result := MediumPayload{}
279-
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
300+
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
280301
b.Fatal(err)
281302
}
282303
}
@@ -315,41 +336,51 @@ func Benchmark_Decode_LargeStruct_Unmarshal_FastJson(b *testing.B) {
315336
}
316337
}
317338

318-
func Benchmark_Decode_LargeStruct_Unmarshal_JsonIter(b *testing.B) {
339+
func Benchmark_Decode_LargeStruct_Unmarshal_Sonic(b *testing.B) {
319340
b.ReportAllocs()
320341
for n := 0; n < b.N; n++ {
321342
result := LargePayload{}
322-
if err := jsoniter.Unmarshal(LargeFixture, &result); err != nil {
343+
if err := sonic.Unmarshal(LargeFixture, &result); err != nil {
323344
b.Fatal(err)
324345
}
325346
}
326347
}
327348

328-
func Benchmark_Decode_LargeStruct_Unmarshal_GoJay(b *testing.B) {
349+
func Benchmark_Decode_LargeStruct_Unmarshal_SegmentioJson(b *testing.B) {
350+
b.ReportAllocs()
351+
for i := 0; i < b.N; i++ {
352+
result := LargePayload{}
353+
if err := segmentiojson.Unmarshal(LargeFixture, &result); err != nil {
354+
b.Fatal(err)
355+
}
356+
}
357+
}
358+
359+
func Benchmark_Decode_LargeStruct_Unmarshal_JsonIter(b *testing.B) {
329360
b.ReportAllocs()
330361
for n := 0; n < b.N; n++ {
331362
result := LargePayload{}
332-
if err := gojay.UnmarshalJSONObject(LargeFixture, &result); err != nil {
363+
if err := jsoniter.Unmarshal(LargeFixture, &result); err != nil {
333364
b.Fatal(err)
334365
}
335366
}
336367
}
337368

338-
func Benchmark_Decode_LargeStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
369+
func Benchmark_Decode_LargeStruct_Unmarshal_GoJay(b *testing.B) {
339370
b.ReportAllocs()
340-
for i := 0; i < b.N; i++ {
371+
for n := 0; n < b.N; n++ {
341372
result := LargePayload{}
342-
if err := gojay.Unsafe.UnmarshalJSONObject(LargeFixture, &result); err != nil {
373+
if err := gojay.UnmarshalJSONObject(LargeFixture, &result); err != nil {
343374
b.Fatal(err)
344375
}
345376
}
346377
}
347378

348-
func Benchmark_Decode_LargeStruct_Unmarshal_SegmentioJson(b *testing.B) {
379+
func Benchmark_Decode_LargeStruct_Unmarshal_GoJayUnsafe(b *testing.B) {
349380
b.ReportAllocs()
350381
for i := 0; i < b.N; i++ {
351382
result := LargePayload{}
352-
if err := segmentiojson.Unmarshal(LargeFixture, &result); err != nil {
383+
if err := gojay.Unsafe.UnmarshalJSONObject(LargeFixture, &result); err != nil {
353384
b.Fatal(err)
354385
}
355386
}
@@ -415,37 +446,37 @@ func Benchmark_Decode_LargeStruct_Stream_EncodingJson(b *testing.B) {
415446
}
416447
}
417448

418-
func Benchmark_Decode_LargeStruct_Stream_JsonIter(b *testing.B) {
449+
func Benchmark_Decode_LargeStruct_Stream_SegmentioJson(b *testing.B) {
419450
b.ReportAllocs()
420451
reader := bytes.NewReader(LargeFixture)
421452
for i := 0; i < b.N; i++ {
422453
result := LargePayload{}
423454
reader.Reset(LargeFixture)
424-
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
455+
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
425456
b.Fatal(err)
426457
}
427458
}
428459
}
429460

430-
func Benchmark_Decode_LargeStruct_Stream_GoJay(b *testing.B) {
461+
func Benchmark_Decode_LargeStruct_Stream_JsonIter(b *testing.B) {
431462
b.ReportAllocs()
432463
reader := bytes.NewReader(LargeFixture)
433-
for n := 0; n < b.N; n++ {
434-
reader.Reset(LargeFixture)
464+
for i := 0; i < b.N; i++ {
435465
result := LargePayload{}
436-
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
466+
reader.Reset(LargeFixture)
467+
if err := jsoniter.NewDecoder(reader).Decode(&result); err != nil {
437468
b.Fatal(err)
438469
}
439470
}
440471
}
441472

442-
func Benchmark_Decode_LargeStruct_Stream_SegmentioJson(b *testing.B) {
473+
func Benchmark_Decode_LargeStruct_Stream_GoJay(b *testing.B) {
443474
b.ReportAllocs()
444475
reader := bytes.NewReader(LargeFixture)
445-
for i := 0; i < b.N; i++ {
446-
result := LargePayload{}
476+
for n := 0; n < b.N; n++ {
447477
reader.Reset(LargeFixture)
448-
if err := segmentiojson.NewDecoder(reader).Decode(&result); err != nil {
478+
result := LargePayload{}
479+
if err := gojay.NewDecoder(reader).DecodeObject(&result); err != nil {
449480
b.Fatal(err)
450481
}
451482
}

0 commit comments

Comments
 (0)