测试了一下编解码的执行效果

简介: 测试了一下编解码的执行效果

背景


有热心朋友反馈:


protosbuff支持的类型少~而且不支持嵌套~性能更没有json高,如不是外网使用节约流量,没有用的必要~


我觉得评论说的很好。但是以淘金式思路来看这个问题,需要提出自己的问题,进行批判性吸收。

 

编码效率


1112728-20190420064039240-1171904481.png


写了一段代码测试使用protostuff和json两种序列化编码的执行速度。结果每次protostuff的速度都比json快。下面是其中3次的结果:


1112728-20190420064010959-414356374.png


(结果1)


1112728-20190420063947239-516474643.png


(结果2)


1112728-20190420063925368-1922869936.png


(结果3)


结论:protostuff编码速度快于json。


这个数据让我非常的自责,因为可以看到编码的速度在100ms上下,是非常耗时的操作。但是我在编写我们项目代码的时候没有加专门的监控统计。


为了验证是否和执行顺序有关,调换一下执行顺序。实际上如果在同一个方法里先后运行两次序列化,会影响执行结果。但是因为用了两个独立的junit test方法,所以影响可忽略不计。来看看效果。


1112728-20190420063900451-1620078220.png


这是修改了顺序的代码。下面是其中3次的结果:


1112728-20190420063835159-1897851487.png


(结果1)


1112728-20190420063808071-1142484830.png


(结果2)


1112728-20190420063743529-1805773531.png


(结果3)


可以看到,protostuff编码速度仍然快于json。

 

解码效率



1112728-20190420063720129-2021055685.png


改造一下代码,测试一下解码效率。


1112728-20190420063652998-420907368.png


(结果1)


1112728-20190420063633692-362867014.png


(结果2)


1112728-20190420063601718-2142522607.png


(结果3)


结论:protostuff解码速度远远快于json。

 

编码后的大小



1112728-20190420063513222-1124346234.png


结果:


1112728-20190420063445685-555419404.png


结论:protostuff编码后的数据小于json。


换一个复杂对象验证效果:


1112728-20190420063412633-988498923.png


结果:


1112728-20190420063343004-1169354969.png


又换了一个更复杂的,结果:


1112728-20190420063327643-504633511.png


虽然protostuff编码后的数据小于json。但是相差不是很大。这是因为刚才所有的测试(包括效率和大小)都是基于我将protostuff编解码和base64绑定处理了。


1112728-20190420063304027-1084507331.png


这是编码。


1112728-20190420063233308-1684323116.png


这是解码。如果不用base64,最后一条的结果是


1112728-20190420063209273-732460032.png


protostuff的优势还是很明显的。


关于支持的类型少和不支持嵌套。看上面我用到的对象Pod,是

io.fabric8.kubernetes.api.model.Pod,有k8s背景的朋友应该知道这个对象有多复杂。测试里面的ResourceMessage对象其实是个泛型对象,里面嵌套了Pod。所以也不存在不支持嵌套这一说。

相关文章
|
1月前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
36 0
|
测试技术
CRC-16 MODBUS原理,附实测可用源码
之前做串口解析,CRC校验一直用和校验,就是吧各个位加在一起,新来一个串口协议,是CRC-16 MODBUS的形式校验,不会呀,从网上找了找资源,没有找到源码,都要下载,分享出来。
CRC-16 MODBUS原理,附实测可用源码
|
5月前
|
异构计算
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
49 0
|
8月前
|
编解码 负载均衡 测试技术
使用i9-9880H测试h264/265编解码开销
使用i9-9880H测试h264/265编解码开销
69 0
|
测试技术
Loadrunner 脚本开发-从文件读取数据并参数化
Loadrunner 脚本开发-从文件读取数据并参数化
62 0
|
存储 算法 异构计算
HLS开发学习-11- for 循环优化(一)
HLS开发学习-11- for 循环优化(一)
287 0
HLS开发学习-11- for 循环优化(一)
|
缓存 调度
HLS开发学习-12- for 循环优化(二)
HLS开发学习-12- for 循环优化(二)
262 0
HLS开发学习-12- for 循环优化(二)
EMQ
|
Java 测试技术 Linux
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
本文是开源测试工具JMeter扩展性开发教程第三期,讲解如何采用JMeter内置功能BeanShell实现动态生成测试数据,并探讨其与Java扩展JMeter的实现方式对比。
EMQ
138 0
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
FPGA-测试文件的编写
FPGA-测试文件的编写
301 0
|
测试技术
接口测试平台代码实现42:各个请求体自动显示
本节主要是用来在用户打开调试弹层后,能自动显示弹层的接口请求体的功能。 本节之后,将会进行数节的 接口后台实际请求的代码实现。
接口测试平台代码实现42:各个请求体自动显示