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

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

背景


有热心朋友反馈:


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

相关文章
|
XML 存储 编译器
Protobuf 详解
Protobuf 详解
Java中的switch语句详解
Java中的switch语句详解
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
914 1
多线程并发之Semaphore(信号量)使用详解
多线程并发之Semaphore(信号量)使用详解
5321 0
|
存储 运维 监控
十年磨一剑:蚂蚁集团可观测性平台 AntMonitor 揭秘
蚂蚁集团的业务种类繁多,兼具金融级的“稳” 和互联网的 “快”,支撑又快又稳的业务发展需要完善的稳定性保障体系, 这个体系的基石就是可观测性平台-AntMonitor 。 早在2011年前,监控平台就已经完成初代建设,在2012到2017年这五年间,蚂蚁监控技术团队抽象出了业务视角监控牵引的模式,大大提升了核心业务的故障发现能力,同期研发了可视化引擎与易用的配置系统。为了支撑双11等大规模海量计算场景,在底层数据技术上做到了实时稳定的大规模日志和指标处理能力。随着这些能力的完成,可观测平台的产品也逐渐成熟。
|
Java 测试技术 容器
mockito(模拟测试)框架基本使用指南
mockito(模拟测试)框架基本使用指南
2735 1
|
XML 安全 Java
【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(下)
【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(下)
279 0
|
1天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
374 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?

热门文章

最新文章