https://github.com/yueyoum/playground/tree/master/Json%20VS%20Protobuf
周末两天都在搞这个东西, 手里几个项目都用的 protobuf,最初是觉得方便, 最近觉得 json 其实比 protobuf 还方便,特别是在服务端。
于是自己就对 json 和 protobuf 在打包大小,速度方面做了测试。 特别加入了 C#,因为客户端用的这个。
从客户端来看,protobuf 还是占有很大优势的。
https://gist.github.com/joshsz/11299196
Running at 10000 times
user system total real
msgpack 0.230000 0.010000 0.240000 ( 0.242138)
json 0.590000 0.030000 0.620000 ( 0.630611)
protobuf 3.170000 0.040000 3.210000 ( 3.256336)
msgpack: 5.20 mb
json: 9.78 mb
protobuf: 2.59 mb
msgpack: 694k allocs
json: 1240k allocs
protobuf: 2608k allocs
比 json 快 10% 的话,感觉就没必要上 msgpack 了 因为
protobuf/thrift 的 ruby/python 实现非常糟糕,完全体现不出速度来,还不如用 capnp + C 绑定
messagepack 是比 json 要快一点,但它的 js 版比 json 慢很多
没有巨大的性能差别的话,还是选择纯文本协议比较好
#14 楼 @yueyoum 个人认为比如后台服务器直接的交互应该尽量使用同一种协议格式,这样可以方便相互调用,而且只需要填好一个协议的坑就行。
至于服务端和客户端交互,不知道现在大多数应用都是用什么协议。这块我觉得应该选择尽量能满足 App,Web、WAP 同时调用的协议格式。(这块没有实践过,不知道 Thrift/Protobuf 能否用于 App)
再给 LZ 提一点,根据我的测试,Thrift 的先后兼容性做的很不好:比如使用 thrfit(0.7.0)生产的 Java 代码,使用 0.9.0 的库就会报错。这点我觉得好坑爹!另外,还没有很好的解决办法。
另外,还有两个协议格式:
希望对你有所帮助。