Skip to content

Instantly share code, notes, and snippets.

@shijuvar
Created January 30, 2017 10:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shijuvar/25ad7de9505232c87034b8359543404a to your computer and use it in GitHub Desktop.
Save shijuvar/25ad7de9505232c87034b8359543404a to your computer and use it in GitHub Desktop.
Benchmarking Protocol Buffers, JSON and XML in Go.
// Benchmark testing to measure the performance of marshaling and unmarshaling of ProtoBuf, JSON and XML
package order
import (
"encoding/json"
"encoding/xml"
"testing"
"time"
"github.com/golang/protobuf/proto"
)
var order = &Order{
Id: "101",
Status: "Created",
CreatedOn: time.Now().Unix(),
OrderItems: []*Order_OrderItem{
&Order_OrderItem{
Code: "knd100",
Name: "Kindle Voyage",
UnitPrice: 220,
Quantity: 1,
},
&Order_OrderItem{
Code: "kc101",
Name: "Kindle Voyage SmartShell Case",
UnitPrice: 10,
Quantity: 2,
},
},
}
// Benchmark Proto3 Marshal
func BenchmarkOrderProto3Marshal(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := proto.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
}
}
// Benchmark JSON Marshal
func BenchmarkOrderJSONMarshal(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := json.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
}
}
// Benchmark XML Marshal
func BenchmarkOrderXMLMarshal(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := xml.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
}
}
// Benchmark Proto3 Unmarshal
func BenchmarkOrderProto3Unmarshal(b *testing.B) {
data, err := proto.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
for i := 0; i < b.N; i++ {
var order Order
err := proto.Unmarshal(data, &order)
if err != nil {
b.Fatal("Unmarshaling error:", err)
}
}
}
// Benchmark JSON Unmarshal
func BenchmarkOrderJSONUnmarshal(b *testing.B) {
data, err := json.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
for i := 0; i < b.N; i++ {
var order Order
err := json.Unmarshal(data, &order)
if err != nil {
b.Fatal("Unmarshaling error:", err)
}
}
}
// Benchmark XML Unmarshal
func BenchmarkOrderXMLUnmarshal(b *testing.B) {
data, err := xml.Marshal(order)
if err != nil {
b.Fatal("Marshaling error:", err)
}
for i := 0; i < b.N; i++ {
var order Order
err := xml.Unmarshal(data, &order)
if err != nil {
b.Fatal("Unmarshaling error:", err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment