Merge pull request #140 from narqo/bench-jsoniter

Add jsoniter to benchmarks
This commit is contained in:
Vasily Romanov
2017-09-02 18:12:37 +03:00
committed by GitHub
4 changed files with 127 additions and 6 deletions
+5 -4
View File
@@ -1,8 +1,9 @@
language: go
go:
- tip
- tip
install:
- go get github.com/ugorji/go/codec
- go get github.com/pquerna/ffjson/fflib/v1
- go get github.com/golang/lint/golint
- go get github.com/ugorji/go/codec
- go get github.com/pquerna/ffjson/fflib/v1
- go get github.com/json-iterator/go
- go get github.com/golang/lint/golint
+2 -1
View File
@@ -4,7 +4,7 @@ export GOPATH
all: test
.root/src/$(PKG):
.root/src/$(PKG):
mkdir -p $@
for i in $$PWD/* ; do ln -s $$i $@/`basename $$i` ; done
@@ -45,6 +45,7 @@ test: generate root
bench-other: generate root
@go test -benchmem -bench . $(PKG)/benchmark
@go test -benchmem -tags use_ffjson -bench . $(PKG)/benchmark
@go test -benchmem -tags use_jsoniter -bench . $(PKG)/benchmark
@go test -benchmem -tags use_codec -bench . $(PKG)/benchmark
bench-python:
+1 -1
View File
@@ -1,4 +1,4 @@
// +build !use_easyjson,!use_ffjson,!use_codec
// +build !use_easyjson,!use_ffjson,!use_codec,!use_jsoniter
package benchmark
+119
View File
@@ -0,0 +1,119 @@
// +build use_jsoniter
package benchmark
import (
"testing"
jsoniter "github.com/json-iterator/go"
)
func BenchmarkJI_Unmarshal_M(b *testing.B) {
b.SetBytes(int64(len(largeStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
err := jsoniter.Unmarshal(largeStructText, &s)
if err != nil {
b.Error(err)
}
}
}
func BenchmarkJI_Unmarshal_S(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Entities
err := jsoniter.Unmarshal(smallStructText, &s)
if err != nil {
b.Error(err)
}
}
b.SetBytes(int64(len(smallStructText)))
}
func BenchmarkJI_Marshal_M(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := jsoniter.Marshal(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkJI_Marshal_L(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := jsoniter.Marshal(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkJI_Marshal_M_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := jsoniter.Marshal(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
func BenchmarkJI_Marshal_L_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := jsoniter.Marshal(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
func BenchmarkJI_Marshal_S(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := jsoniter.Marshal(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkJI_Marshal_S_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := jsoniter.Marshal(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
func BenchmarkJI_Marshal_M_ToWriter(b *testing.B) {
enc := jsoniter.NewEncoder(&DummyWriter{})
for i := 0; i < b.N; i++ {
err := enc.Encode(&largeStructData)
if err != nil {
b.Error(err)
}
}
}