最近在看《设计数据密集型应用》,看到编码部分,又想到框架中的自定义编码,有所想: 框架自定义的序列化方式很难用(字段值编码后拼接,无需编码名称),每次处理循环体都要手动处理操作字节,而且后兼容,想问下大伙:1 、为什么搜索结果都说 binary protocol 比 textprotocol 快; 2 、项目用的 protocol 是? 3 、有没有一种可读性高并且速度快的编码方式?
![]() | 1 oott123 2021-01-08 10:32:26 +08:00 via Android overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用( |
![]() | 2 chendy 2021-01-08 10:40:04 +08:00 1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂 2. binary 只想到 protobuf,text 只想到 json 3. json 也不慢 |
3 togou 2021-01-08 12:11:04 +08:00 解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊 |
![]() | 4 PureWhiteWu 2021-01-08 12:11:28 +08:00 binary |
![]() | 5 haosamax OP 各位说的是,为社么快这块理解了 |
6 liian2019 2021-01-08 14:04:58 +08:00 json 和 protobuf |
7 MeteorCat 2021-01-08 14:28:00 +08:00 via Android json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试 |
![]() | 9 icyalala 2021-01-08 14:35:06 +08:00 protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。 |
10 chenqh 2021-01-08 14:37:04 +08:00 json 太好调试了呀,二进制的东西调试成本比 json 高太多了 |
![]() | 12 xiangbohua 2021-01-08 19:38:28 +08:00 没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。 |
![]() | 13 xiangbohua 2021-01-08 20:00:46 +08:00 哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞 |
![]() | 14 12101111 2021-01-08 21:30:06 +08:00 但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug |
![]() | 15 nthhdy 2021-01-08 22:33:44 +08:00 binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。 |
![]() | 16 haosamax OP @xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain |
![]() | 18 labubu 2021-01-09 16:56:25 +08:00 要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码 |
20 onepix 2021-01-11 17:29:01 +08:00 textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊 |
22 SkyLine7 2021-01-12 15:06:19 +08:00 json |