JSON相关框架-性能比较 开发一组 enein
以下报表数据来自在 jvm-serializers 测试工具.
注: 硬件环境为笔记本电脑所以对数据可能会造成一些影响.以下只关心JSON框架的对比度.
硬件配置
本机配置::
采用VM 进行框架测试配置:
先简单介绍下一些网络传输协议:
二进制协议(详情请看’ 软件系统开发中的数据交换协议 ’来了解决软件系统中的一些相关协议
Jackson分为三种模式(stream,tree,databind);以下没有对stream 。
Gson为Google开发的一套Java对象与JSON相互转化的工具
Json-lib 现在项目里使用的轻量级json框架.
Fastjson 阿里巴巴-温少 开发的json框架 (号称最快的json框架)
Smile (官方文档的一句话定义:” Optional Smile jar (jackson-mrbean) contains support for JSON-compatible binary format called "Smile". It depends on core module.”) Json框架相关可以转换为其它格式(二进制,xml….).
注:以下数据暂且没有对Jackson 的 stream 流进行测试.之后会有对其进行的测试.
(报表信息在本目录下的(json框架数据测试报表.rar)即可看到相关柱状图(nanos:表示为’毫微秒’;tps(transactions per second)
create: create an object (using the classes specified by the serialization tool)
ser: create an object and serialize it 序列化时间
+same: serialize the same object (i.e. doesn't include creation time)
deser: deserialize an object 反序列化时间
+shal: deserialize an object and access the top-level fields
+deep: deserialize an object and access all the fields
total: create + serialize + deserialize and access all fields
size: the size of the serialized data 序列化数据大小
+dfl: the size of the serialized data compressed with Java's built-in implementation of DEFLATE (zlib)
以上信息可以看出(只考虑json协议相关): fastjson-databind ser/deser(序列化/反序列化)的时间最快(为什么最快?)。其次就是Jackson.
以上测试中没有包含jackson-stream流的测试.其实这个jackson的流解析器是最快的.
小结
ps: 介于FastJson 与 Jackson 两个框架作者偏向Jackson.以下说明理由.
FastJson
虽然序列化反序列化比较快.但文档支持,与Annotation 支持.循环递归等问题处理还不是很完善(虽然网上也已经有对其相应的解决办法).
由于之前使用JSON协议的处理方法都比较简单没有使用到较深入的技术.所以在‘众多‘框架中选型也是比较容易的.但考虑到将来要面对的一些序列化/反序列化.深递归.注解.协议转换.解析器的使用等方面.框架的选型还是要考虑方面还是很多的. Jackson满足我以下列出的五条.
(本人想法以及技术有限想到只有这些)
Jackson
提供了三种处理Json的方法,分别是:
Streaming API :基于独立事件模型处理JSON。效率最高,是下面两种方式的基础。
分别用org.codehaus.jackson.JsonParser 和 org.codehaus.jackson.JsonGenerator 读写Json
Tree Model :基于一个可变的树表示一个Json模型。最灵活
org.codehaus.jackson.map.ObjectMapper 创建树(基于JsonNode为节点)
Tree Model与XML DOM类似
Data Binding:用属性存取或者注释来处理从Json到POJO的转换。最方便,常用这种API
有简单绑定和全数据绑定,同样用org.codehaus.jackson.map.ObjectMapper处理
以下只对Fastjson 与 Jackson 进行阐述. 属于个人观点
【1】 程序员比较关心的是wiki文档.一个好的框架离不开一个好的文档.
【2】 程序员上手要快(框架文档要非常详细),对公司项目各项目之间可利用性要高.
【3】 框架是否开源.源代码可学习价值.
【4】 结合其他技术的能力一定要强.执行效率,是否可以移植平台.
【5】 流行程度.历史背景等其它因素的支持…
PS: 以下测试为转载测试(特此注明) run using Japex Report
原文地址: http://www.cowtowncoder.com/blog/archives/2009/02/entry_204.html
单核处理器: http://www.cowtowncoder.com/perf/json-count-2009-02-17/index.html
dual-core system: http://www.cowtowncoder.com/perf/json-count-2009-02-17-2cpus/index.html
以上为japex report 生成的两个数据报表.从表中可以看出jackson-stream是最快的.jackson-tree其次.
转载于:https://blog.51cto.com/targtime/871731