perf(*): replace gob with msgpack by vm-001 · Pull Request #270 · webhookx-io/webhookx
import (
"fmt"
"testing"
"time"
)
type User struct {
Username string `json:"username"`
Password string `json:"password"`
Age int `json:"age"`
Enabled bool `json:"enabled"`
Metadata map[string]interface{} `json:"metadata"`
}
var user = User{
Username: "root",
Password: "secret",
Age: 20,
Enabled: true,
Metadata: map[string]interface{}{
"hello": "world",
"int": 10,
},
}
var n = 1000000
func TestJson(t *testing.T) {
fmt.Println("=========== testing json ===========")
var bytes []byte
var err error
fmt.Println("===>>> serializer")
now := time.Now()
for i := 0; i < n; i++ {
bytes, err = JSON.Serialize(user)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
if err != nil {
panic(err)
}
fmt.Println("size: ", len(bytes))
//fmt.Println(string(b))
fmt.Println("===>>> deserialize")
now = time.Now()
var output User
for i := 0; i < n; i++ {
err = JSON.Deserialize(bytes, &output)
}
if err != nil {
panic(err)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
fmt.Printf("%+v\n", output)
fmt.Println("=========== testing json ===========")
fmt.Println()
fmt.Println()
}
func TestGob(t *testing.T) {
fmt.Println("=========== testing gob ===========")
var bytes []byte
var err error
fmt.Println("===>>> serializer")
now := time.Now()
for i := 0; i < n; i++ {
bytes, err = Gob.Serialize(user)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
if err != nil {
panic(err)
}
fmt.Println("size: ", len(bytes))
fmt.Println("===>>> deserialize")
now = time.Now()
var output User
for i := 0; i < n; i++ {
err = Gob.Deserialize(bytes, &output)
}
if err != nil {
panic(err)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
fmt.Printf("%+v\n", output)
fmt.Println("=========== testing gob ===========")
fmt.Println()
fmt.Println()
}
func TestMsgpack(t *testing.T) {
fmt.Println("=========== testing msgpack ===========")
var bytes []byte
var err error
fmt.Println("===>>> serializer")
now := time.Now()
for i := 0; i < n; i++ {
bytes, err = MsgPack.Serialize(user)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
if err != nil {
panic(err)
}
fmt.Println("size: ", len(bytes))
fmt.Println("===>>> deserialize")
now = time.Now()
var output User
for i := 0; i < n; i++ {
err = MsgPack.Deserialize(bytes, &output)
}
if err != nil {
panic(err)
}
fmt.Println("total time :", time.Since(now).Milliseconds(), "ms")
fmt.Printf("%+v\n", output)
fmt.Println("=========== testing msgpack ===========")
fmt.Println()
}