Json VS Protobuf

2015-04-27 02:10:57 +08:00
 yueyoum
https://github.com/yueyoum/playground/tree/master/Json%20VS%20Protobuf

周末两天都在搞这个东西,
手里几个项目都用的 protobuf,最初是觉得方便,
最近觉得 json其实比 protobuf还方便,特别是在服务端。

于是自己就对 json 和 protobuf 在打包大小,速度方面做了测试。
特别加入了C#,因为客户端用的这个。

从客户端来看, protobuf 还是占有很大优势的。
13222 次点击
所在节点    程序员
43 条回复
327beckham
2015-04-27 02:31:18 +08:00
果断protobuf,在后期的扩展性来说,比json好。
dcoder
2015-04-27 03:26:43 +08:00
觉得直接 JSON 方便很多, 特别是如果你 server 端的基本都是用 JSON 交流和存储数据的话

还有, 你 C# 用了 newtonsoft 的 JSON 了吗? 比官方的 JSON 效率高, 很多人用这个的
http://www.newtonsoft.com/json
dcoder
2015-04-27 03:42:22 +08:00
翻了下lz的github项目, 猜测你是在用 C# for Mono&Unity3d
你使用的是 LitJson 作为Json库

我觉得最好的 JSON库 for Mono&Unity3d 是这个:
https://www.assetstore.unity3d.com/en/#!/content/11347

虽然有一次性的 $25 收费, 不过买到的是带源码的,
这个plugin作者忠实地移植了.NET community评价最好的 newtonsoft 的 JSON 库
znoodl
2015-04-27 08:04:30 +08:00
可读上json强,楼主再比下msgpack
patrickstar
2015-04-27 08:35:25 +08:00
我现在需要追求性能,毫不犹豫得选择了protobuf,正在实施
EPr2hh6LADQWqRVH
2015-04-27 08:54:27 +08:00
传输protobuf, 存储bson, 公开API json
hewigovens
2015-04-27 09:21:29 +08:00
clino
2015-04-27 09:23:34 +08:00
@znoodl 感觉msgpack可读性也不好哈,不过感觉比 protobuf 简单
garfeildma
2015-04-27 09:40:27 +08:00
clino
2015-04-27 10:12:53 +08:00
楼主加个msgpack的到测试里看看?

另外看结果比较奇怪的是,为什么python版的protobuf比json反而会慢这么多?
amycs
2015-04-27 10:14:04 +08:00
@avastms 传输也用 bson 的话有什么问题么?
EPr2hh6LADQWqRVH
2015-04-27 10:28:40 +08:00
@amycs 因为要传key值所以效率不如protobuf
yueyoum
2015-04-27 10:29:12 +08:00
@dcoder

感谢 推荐, JSON.NET 已经加入我的 unity wish list了, 不过还没购买
yueyoum
2015-04-27 10:31:52 +08:00
@znoodl
@clino

msgpack 以前也试过, 感觉不到它的优势

比json / bson 并没有多大优势。 反而又多了一个 私有协议。
yueyoum
2015-04-27 10:33:05 +08:00
@hewigovens

flatbuffers 也关注过, 但是目前 支持的语言太少, 比如就没有 erlang binding

我暂时也没时间去自己写一个。


还是用用其他现成,成熟的吧
yueyoum
2015-04-27 10:35:17 +08:00
@clino

至于 python 的 protobuf 比 json 慢,
是因为 以前看别人也说过 官方的 protobuf 库 效率很低, 但没说有多低。

我也是一测,才发现居然这么慢。。。
yueyoum
2015-04-27 10:36:34 +08:00
@avastms

> 因为要传key值所以效率不如protobuf

你是指 bson 吗?


没明白这句话的意思 ,求详解
clino
2015-04-27 11:36:45 +08:00
@yueyoum msgpack的效率不够好?
应该也不会多一个私有协议,如果用应该也是替换掉protobuf吧,msgpack和protobuf应该都算私有的?
yueyoum
2015-04-27 11:54:03 +08:00
@clino

恩, 我的意思是
1. msgpack 和 json 一样, 不用先定义 协议描述, 直接 序列化/反序列化就行.

那么此时 json是内置的, msgpack 还要安装第三方库。 这时候就没有json 方便了。

2. protobuf 和 msgpack 都要安装第三方库. protobuf 的定义文件,就是协议文档。
在多人合作开发的时候 有优势。 json 和 msgpack 还要自己再写一边文档。
est
2015-04-27 12:07:37 +08:00
效率高,还可以考虑用一个非主流的格式叫做 tnetstring

https://pypi.python.org/pypi/tnetstring

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/186561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX