json序列号性能对比
笔者在日常工作中对高并发的要求越来越高,在针对 QPS
50k/s 的情况下需要对 json
数据进行序列化和反序列化,如果使用官方提供的 encoding/json
包的话性能会低很多。
下面基于常用的 json 序列化/反序列化进行性能对比:
1 | //easyjson:json |
1 | package main |
序列化
- 结构体
1 | $ go test -benchmem -run=^$ -count=3 -bench "^BenchmarkMarshal.*$" |
- Map
1 | $ go test -benchmem -run=^$ -count=3 -bench "^BenchmarkMarshalMap.*$" |
反序列号
- 结构体
1 | $ go test -benchmem -run=^$ -count=3 -bench "^BenchmarkUnmarshal.*$" |
- Map
1 | $ go test -benchmem -run=^$ -count=3 -bench "^BenchmarkUnmarshalMap.*$" |
总结
结构体,从测试结果上看 easyjson 性能是最好的,缺点是需要使用工具事先生成结构体的序列化/反序列化接口,如果忘记生成则会有问题。
序列化:easyjson > json-iterator > sonic > encoding/json
反序列化:easyjson > sonic > json-iterator > encoding/jsonmap
sonic > json-iterator > encoding/json