今天抽空对几种常见的格式化数据进行了测试比较,结果如下表所示。
对同一个字符串,各执行100000次encode和decode
方式 | encode时间消耗 | decode时间消耗 | 生成文件大小 |
---|---|---|---|
json(数组) | 0.44060492515564 | 1.0278780460358 | 33M |
msgpack(数组) | 0.12197613716125 | 0.39857411384583 | 20M |
serialize(数组) | 0.58154702186584 | 0.40348696708679 | 42M |
protocol buffer(对象) | 29.32014298439 | 26.832285881042 | 11M |
msgpack(对象) | 1.4672288894653 | 5.4165670871735 | 173M |
serialize(对象) | 3.957267999649 | 5.4174439907074 | 324M |
结论
msgpack
时间消耗方面是最好的。处理数组方面绝对第一。并且生成的文本数据也很小。缺点是二进制的。不利于阅读。
json和serialize各有利弊。利于阅读。
msgpack各个语言基本都有支持。缓存数据可以使用此方式。API要求性能很高时,也可以考虑。
protocol buffer
protocol buffer 是google内部使用的基本类库。可以看到,效率并不是很高,但是生成的数据量却是最小的。很多的客户端APP使用此协议进行数据传输,可以极大的减少网络数据传输。
序列化数据也是二进制的。 反序列可以直接生成数据模型,使用上也非常方便。
以上使用的php测试的。具体语言的话,需要具体测试。