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 还是占有很大优势的。
13603 次点击
所在节点    程序员
43 条回复
yueyoum
2015-04-28 12:57:38 +08:00
@reorx

你说的对, JSON 和 protobuf 肯定是要用在各自合适的环境中

比如我的项目:

服务器 , 客户端之间是 protobuf
服务器各个组件之间的API调用 是 json

我之所以有那个对比的测试, 是想测试一下 在 服务端和客户端用 gzip 压缩的json,看到底是否可行。
从结果来看,erlang/python服务端基本没影响, c#客户端性能降低了好多。
结论就是 如果是 弱交互,消息通信不频繁的项目, 直接上json就行。不过最好gzip压缩一下


至于你后来说的, **一旦定义过的required字段,不允许更改** 这个我不赞同

有些功能一改再改,到最后直接换个方式玩法, 消息大概是必然的。

所以这才是版本控制的重要性。
reorx
2015-04-28 13:17:17 +08:00
@yueyoum 嗯嗯,是的,其实不可能有那么严格的限制,毕竟业务需求是在变化的,我那样说主要还是强调 schema 不要轻易变化,倒不是说用 Protobuf 就一定要那样。不过我自己在团队内部确实是这样要求的,required 在设计确定下来之后基本上就不会改了,新的需求通过增加 optional 来解决,有这样的约束大家会非常谨慎,反复推敲,多方确认,来保证所设计的 schema 是可以兼顾可见的未来的需求的。

所以「不允许更改」==「设计应该足够完善以至理论上不应该产生更改」,警戒意义多于实际约束 XD
dcoder
2015-04-28 13:39:35 +08:00
@yueyoum marked

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

https://ex.noerr.eu.org/t/186561

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

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

© 2021 V2EX