protobuf为什么快(Protobuf性能到底有没有比JSON快5倍)

:暂无数据 2026-08-07 15:30:01 :0

protobuf为什么快(Protobuf性能到底有没有比JSON快5倍)

本篇文章给大家谈谈protobuf为什么快,以及Protobuf性能到底有没有比JSON快5倍对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

Protobuf性能到底有没有比JSON快5倍

直接利用python提供的json包,在django model的定义中增加一个方法toJSON,利用django model 能访问 _meta.fields 得到相关属性而得到,例子如下:
class Category(models.Model):
autoid = models.AutoField(primary_key=True)
email=models.CharField(max_length=150,blank=False)
comtype=models.CharField(max_length=20,blank=False)
catname=models.CharField(max_length=150,blank=False)
def __unicode__(self):
return ’%s’ % (self.catname)
def toJSON(self):
import json
return json.dumps(dict())
然后用django查出数据,并转换成json,代码如下:
row=models.Category.objects.get(autoid=23)

google的protobuf比这样java原生的方式更有效率吗

在这种简单的情况下,肯定是你写的这种原生的更快,内存使用也更少
但是protobuf不止是简单的解决单一的、不变的序列化/反序列化,他关注的重点在:
1. 确保正确。原生的方式如果纯手写,那么必须保证每个字段读写的大小、顺序都一致,而如果类一多,对人脑是个很大的负担。所以用代码生成代码的方式,减轻人脑的负担就是更好的选择。
2. 高版本兼容低版本。如果你的数据类成员不是一成不变的,而是随着业务的扩大会不断的新增,而旧有的数据不能在升级的同时立即转换为新的格式,也就是说新增了数据类成员,改变了读取逻辑之后,你的程序还有可能读取到旧的格式的数据,如何保证这种情况下逻辑依然正确,用原生的方式就会非常麻烦。而protobuf使用optional配合默认值,可以很轻松的做版本兼容。
3. 减小体积。protobuf对数字采用了Varints编码,越小的数字占用字节越少。当然这点只对网络传输有用。
总之,因为上述的1、2两点,我们需要一个代码生成的、有schema能做版本兼容的序列化/反序列化方案,而正好有protobuf这么一个现成的满足要求,又久经考验的库,自然成为很多人的选择。
至于你贴的链接,貌似只是一个测试,比较了一下jvm下可以使用的序列化/反序列化方案的效率/性能。

protobuf适不适合物联网

最关键的问题来自如下几点:1、难于调试:都是二进制协议,序列化后的内容不可读2、安装繁琐恶心:都要安装很久,编译一堆东西3、对多语言支持有限:最近几年新语言出的太快了4、对WEB不友好:js没有原生支持所以,逐渐就不用了。现在遇到类似的需求都是用HTTP里面封装JSON的。所以调用的请求用form提交,这样用网页上的表单就能模拟。返回的是一个dict,其中errnum表示错误码,0为成功。errmsg为错误信息,方便客户端调试。result为实际返回的数据。这样的方式调试方便,兼容性好。虽然慢了不少,但其实人的效率更重要。

protobuf测试gofast

gogoprotobuf有两个插件可以使用

protoc-gen-gogo:和protoc-gen-go生成的文件差不多,性能也几乎一样(稍微快一点点)

protoc-gen-gofast:生成的文件更复杂,性能也更高(快5-7倍) 

这里只是简单的用go test测试了一下

关于本次protobuf为什么快和Protobuf性能到底有没有比JSON快5倍的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

protobuf为什么快(Protobuf性能到底有没有比JSON快5倍)

本文编辑:admin

更多文章:


withdrawal(withdrawal是什么意思)

withdrawal(withdrawal是什么意思)

今天给各位分享withdrawal是什么意思的知识,其中也会对withdrawal是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 07:00

根据流程图怎么编写程序(用c语言根据流程图写程序)

根据流程图怎么编写程序(用c语言根据流程图写程序)

大家好,今天小编来为大家解答以下的问题,关于根据流程图怎么编写程序,用c语言根据流程图写程序这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 06:00

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

大家好,关于在from子句中可以出现很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何在from 子句中嵌套查询下面的语句在access中出错!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年10月11日 05:20

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

其实countif函数统计个数怎么用的问题并不复杂,但是又很多的朋友都不太了解countif函数怎么用 详解Excel中countif函数的使用方法,因此呢,今天小编就来为大家分享countif函数统计个数怎么用的一些知识,希望可以帮助到大

2026年10月11日 03:30

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

本篇文章给大家谈谈正则匹配数字之前的字符,以及正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年10月11日 03:00

register语言学(register语言学)

register语言学(register语言学)

“register语言学”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看register语言学(register语言学)!

2026年10月11日 01:40

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

“系统架构设计师可以直接考吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)!

2026年10月11日 01:00

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

大家好,如果您还对orlnsertbootmediinselected不太了解,没有关系,今天就由本站为大家分享orlnsertbootmediinselected的知识,包括我电脑开机显示这个是什么意思or insert boot med

2026年10月10日 23:00

display的用法(display是什么意思 详解display的含义和用法)

display的用法(display是什么意思 详解display的含义和用法)

大家好,如果您还对display的用法不太了解,没有关系,今天就由本站为大家分享display的用法的知识,包括display是什么意思 详解display的含义和用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 22:00

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

大家好,今天小编来为大家解答以下的问题,关于html全部居中代码,怎么让网页居中显示,html如何让网页居中这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 21:10

最近更新

withdrawal(withdrawal是什么意思)
2026-10-11 07:00:01 浏览:0
热门文章

标签列表