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

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

背景


有热心朋友反馈:


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。所以也不存在不支持嵌套这一说。

相关文章
|
6天前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
44 0
|
6天前
|
存储 算法 前端开发
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
41 0
|
6月前
|
异构计算
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
54 0
|
9月前
|
编解码 负载均衡 测试技术
使用i9-9880H测试h264/265编解码开销
使用i9-9880H测试h264/265编解码开销
73 0
|
JSON 前端开发 数据格式
crontab、JSON、前端、后端、通信、转换、编码、解码、表达式工具
crontab、JSON、前端、后端、通信、转换、编码、解码、表达式工具
105 0
crontab、JSON、前端、后端、通信、转换、编码、解码、表达式工具
|
存储 算法 异构计算
HLS开发学习-11- for 循环优化(一)
HLS开发学习-11- for 循环优化(一)
298 0
HLS开发学习-11- for 循环优化(一)
|
缓存 调度
HLS开发学习-12- for 循环优化(二)
HLS开发学习-12- for 循环优化(二)
276 0
HLS开发学习-12- for 循环优化(二)
|
前端开发 测试技术
|
编解码 内存技术 容器
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(二)
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(二)
219 0
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(二)
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(一)
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(一)
201 0
【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )(一)