该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-21
最后修改:2011-01-10
在最近的项目中,也需要使用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。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-21
Parser 在哪?
有Parser吗? 没有Parser吗? 有啊? 有就上传啊! |
|
返回顶楼 | |
发表时间:2010-12-21
请LZ证明“自古才子多风骚”,把开源的代码放出来,让大家见证下你多有才,多风骚!
|
|
返回顶楼 | |
发表时间:2010-12-21
Parser在哪啊??
|
|
返回顶楼 | |
发表时间:2010-12-21
楼主你要是开源了,我们也好使用一下。在哪里啊?
|
|
返回顶楼 | |
发表时间:2010-12-21
废话少说 show me your code
thanks |
|
返回顶楼 | |
发表时间:2010-12-21
期待楼主开源,我愿崇拜楼主1年的时间作为代价。
|
|
返回顶楼 | |
发表时间:2010-12-21
也许名字不要叫做fast-xx 效果会更好,哈哈
|
|
返回顶楼 | |
发表时间:2010-12-21
willothe 写道 也许名字不要叫做fast-xx 效果会更好,哈哈
玩过snail mail没? 叫snail parser也许会更受欢迎. |
|
返回顶楼 | |
发表时间:2010-12-21
最后修改:2010-12-21
谦虚!宇宙最快,必须的,把法宝祭出来,让我等众生也使使?!藏着掖着小心那猴头去偷!
|
|
返回顶楼 | |