json、xml、protobuf性能对比

1、序列化能⼒对⽐验证

在这⾥让我们分别使⽤PB与JSON的序列化与反序列化能⼒,对值完全相同的⼀份结构化数据进⾏不同次数的性能测试。

测试结果如下:

这里几组测试的序列大小是一个对象序列化后的大小

100[pb序列化]耗时:0.342ms. 序列化后的⼤⼩:278
100[pb反序列化]耗时:0.435ms.
100[json序列化]耗时:1.306ms. 序列化后的⼤⼩:567
100[json反序列化]耗时:0.926ms.

1000[pb序列化]耗时:3.59ms. 序列化后的⼤⼩:278
1000[pb反序列化]耗时:5.069ms.
1000[json序列化]耗时:11.582ms. 序列化后的⼤⼩:567
1000[json反序列化]耗时:9.289ms.

10000[pb序列化]耗时:34.386ms. 序列化后的⼤⼩:278
10000[pb反序列化]耗时:45.96ms.
10000[json序列化]耗时:115.76ms. 序列化后的⼤⼩:567
10000[json反序列化]耗时:91.046ms.

100000[pb序列化]耗时:349.937ms. 序列化后的⼤⼩:278
100000[pb反序列化]耗时:428.366ms.
100000[json序列化]耗时:1150.54ms. 序列化后的⼤⼩:567
100000[json反序列化]耗时:904.58ms.

由实验结果可得:

  • 编解码性能:ProtoBuf的编码解码性能,⽐JSON⾼出2-4倍。
  • 内存占⽤:ProtoBuf的内存278,⽽JSON到达567,ProtoBuf的内存占⽤只有JSON的1/2。
    注:以上结论的数据只是根据该项实验得出。因为受不同的字段类型、字段个数等影响,测出的数据会有所差异。
    该实验有很多可待优化的地⽅。但其实这种粗略的测试,也能看出来ProtoBuf的优势。

2、总结

序列化协议 通⽤性 格式 可读性 序列化⼤⼩ 序列化性能 适⽤场景
JSON 通⽤(json、xml已成为多种⾏业标准的编写⼯具) ⽂本格式 轻量(使⽤键值对⽅式,压缩了⼀定的数据空间) web项⽬。因为浏览器对于json数据⽀持⾮常好,有很多内建的函数⽀持.
XML 通⽤ ⽂本格式 重量(数据冗余,因为需要成对的闭合标签) XML作为⼀种扩展标记语⾔,衍⽣出了HTML、RDF/RDFS,它强调数据结构化的能⼒和可读性。
ProtoBuf 独⽴(Protobuf只是Google公司内部的⼯具) ⼆进制格式 (只能反序列化后得到真正可读的数据)轻量(⽐JSON更轻量,传输起来带宽和速度会有优化) 适合⾼性能,对响应速度有要求的数据传输场景。Protobuf⽐XML、JSON更⼩、更快。

⼩结:

  1. XML、JSON、ProtoBuf都具有数据结构化和数据序列化的能⼒。
  2. XML、JSON更注重数据结构化,关注可读性和语义表达能⼒。ProtoBuf更注重数据序列化,关注
    效率、空间、速度,可读性差,语义表达能⼒不⾜,为保证极致的效率,会舍弃⼀部分元信息。
  3. ProtoBuf的应⽤场景更为明确,XML、JSON的应⽤场景更为丰富。

你可能感兴趣的:(序列化工具,json,xml)