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()
}