我拥有多年手写Parser的经验,在以前,编写过多个Parser,有SQL的Parser,也有JavaScript的Parser,也有Java的Parser。
在最近的项目中,也需要使用JSON,其中client部分不希望存在依赖,所以就写了一个JSON Parser。最初是直接使用SimpleJSON的,因为其代码少,接口简洁。一个同事说,SimpleJSON存在性能问题,噢,我想,那算了,我自己写一个吧,JSON语法这么简单,对于有“多年行医经验”(来自典故《日本兵与老中医》)的我,自然不是困难的事情,也就是一个晚上就写完了,应用于项目中,测试结果,网络协议的性能提升了两倍,从原来的80,000 TPS提升到了240,000 TPS。顺带说一个花絮,周六晚上加班写完的,直接就应用到项目中了,虽然有TestCase,但还是有一个地方没注意好,出现了一个Bug,星期一还影响了测试工作,早会的时候被同事血泪控诉。
我跟朋友炫耀了一下,朋友说,为啥不用jackson,jackson速度很快。好吧,我就和jackson做了一个性能比较,在大多数场景都是比jackson性能好很多,但是在某一个场景,竟然比jackson稍慢。我不服气啊,因为一看就觉得jackson的Parser写得不够专业,没理由比我这种多年经验的老鸟快的。跟踪其实现代码找到了其优化的办法,觉得那是取巧,不屑于使用。于是优化一下我写的Parser,优化的结果自然是全面超越它。好吧,废话少说,直接上结果。
场景1:
[{"S":321061,"T":"GetAttributeResp"},{"ERROR":null,"TS":0,"VAL":{"SqlList":[{"BatchSizeMax":0,"BatchSizeTotal":0,"ConcurrentMax":1,"DataSource":"jdbc:wrap-jdbc:filters=default,encoding:name=ds-offer:jdbc:mysql://100.10.10.10:8066/xxxx","EffectedRowCount":0,"ErrorCount":0,"ExecuteCount":5,"FetchRowCount":5,"File":null,"ID":2001,"LastError":null,"LastTime":1292742908178,"MaxTimespan":16,"MaxTimespanOccurTime":1292742668191,"Name":null,"RunningCount":0,"SQL":"SELECT @@SQL_MODE","TotalTime":83}]}}]
fast-json : 8,608,334 (我写的parser)
jackson : 17,172,500
simple-json : 36,258,008
场景2:
{"S":321061,"T":"GetAttributeResp"}
fast-json : 1,028,024
jackson : 6,673,850
simple-json : 20,294,257
场景3:
引用
{"name":null,"flag":true}
fast-json : 842,032
jackson : 7,284,100
simple-json : 20,553,188
场景4:
[-5.041598256063065E-20,-7210028408342716000]
fast-json : 1,338,822
jackson : 10,000,239
simple-json : 20,202,679
场景5:
-6470204979932713723
fast-json : 389,004
jackson : 5,405,129
simple-json : 20,418,252
以上的结果都是执行一千次的时间总和,单位是nano。连续执行测试50次,取最后一次的结果,让JVM能够充分优化。JVM的参数是-server。
结论,越简单的对象,偶写的parser(fast-json)性能越好。如场景3,都快差不多100倍了。
好了,吹牛结束啦,有什么后续动作呢?有同事建议开源,嗯,这个建议挺好的,我喜欢用开源的东西,也希望对开源有所贡献,我整理好代码之后,就会开源出来。
注明,我写的Parser是能通过JSON官方的兼容性测试的,不是缺乏功能的残废!
----------------------------------------------
svn已经能够外网访问:
http://119.38.217.15/svn/fastjson/trunk/
(注意,IP地址在2011-1-10修改过)
域名申请的事情还在进行中,还有很多事情要做。最终这是一个类似taobao code(淘蝌蚪)的开源平台,我们的名字叫做Open Sesame。
分享到:
相关推荐
6: v8::internal::Handle<v8::internal::String> v8::internal::JsonParser<false>::SlowScanJsonString<v8::internal::SeqTwoByteString, unsigned short>(v8::internal::Handle<v8::internal::String>, int, int)...
json解析的示例
JsonParser_java 纯java写的JSON解析器
Kotlin-杰森·帕瑟(Kotlin-JsonParser) Kotlin-JsonParser是用于JSON解析的Kotlin库。 它可以将JSON字符串解析为Kotlin Object或以一种简单的方式反向。... implementation 'com.tomatobean:jsonparser:1.0.
JSONParser所需jar包 json simple jar包 JSONParser所需jar包 json simple jar包
JSON转化工具类 JSONParser ,iOS数据转化组件 (JSONParser),支持JSON字符串、模型、字典、模型数组、字典数组之间...
JsonParser Json parsing tool can flexibly configure Import add to build.gradle,${latest.version} is dependencies { compile 'com.blakequ.parser:parser:${latest.version}' } maven ...
matlab开发-JSONParser。将JSON字符串解析为结构和单元格
利用java反射机制实现的json与java对象互相转化的工具,只暴露了两个空开的接口,其他接口都是私有的。
开源项目-buger-jsonparser.zip,Alternative JSON parser for Go (so far fastest)
jsonParser
JsonParser是简单的JSON解析库,您可以使用路径和键来解析JSONObject或JSONArray。 只需在路径中传递对象名称或对象键以及数组项的索引号即可。 安装 此JsonParser JAR将添加到lib文件夹中,然后在构建路径中进行...
JSON解析器在 Java 对象上使用 Gson (toJson / fromJson) 展示了 Gson 库的简单使用,将 Java 对象转换为 JSON 格式,反之亦然; 将 JSON 字符串转换为 Java 对象。
json解析, 博客地址:https://blog.csdn.net/qq_36963950/article/details/107461829
最初,我是为一个依赖许多第三方API的项目而设计的,这些API可能是不可预测的且复杂的。 我喜欢简单,宁愿避免外界依赖。 encoding/json要求您确切地了解您的数据结构,或者如果您更喜欢使用map[string]interface{} ...
JSON解析器JSON解析器
jackson-annotations-2.10.2.jar jackson-core-2.10.2.jar jackson-databind-2.10.2.jar NoClassDefFoundError解决
jsonparser.py
资源来自pypi官网。 资源全名:jsonparser-1.0.tar.gz
描述 这是一个基于事件的 JSON 解析器的 PHP 实现。 当我需要解析非常大的 JSON 文件时,就产生了实现它的想法。... 它被设计成轻量级的,并且它的工作做得很好,我可以准备...我首先使用柠檬 php 作为解析器来解决这个