小测一下fastjson的速度

fastjson确实很厉害(毕竟是阿里大牛写的),在逻辑解析的快捷上可以坐到很方便的搞定,这样直接就直接缩小的很多的工作量,并且代码结构很清晰。

基于以上摘要内容,我就闲着无聊比较了一下。代码如下

 public void testFastJson(){

   String jsonString =   "[\n" +
              "{\n" +
              "orderId: 2964,\n" +
              "code: \"2800001296442\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 22400,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-28 18:28:42\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"小黄瓜,无籽瓜\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2940,\n" +
              "code: \"2700001294044\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 650,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-27 20:05:44\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"两个装柠檬\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2913,\n" +
              "code: \"2600001291319\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 72500,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-26 20:56:19\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"韩国梨,纸箱白心柚,小黄瓜,野生苹果\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2891,\n" +
              "code: \"2500001289120\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 9000,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-25 21:06:20\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"哈密瓜(4个装)\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2865,\n" +
              "code: \"2400001286555\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 81100,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-24 19:57:55\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"西梅,哈密瓜(4个装),云南蜜桔,小黄瓜,木瓜,无籽瓜\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2839,\n" +
              "code: \"2300001283923\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 69000,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-23 20:50:23\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"哈密瓜(4个装),有机红心柚,凯特芒果\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2820,\n" +
              "code: \"2200001282039\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 37500,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-22 20:43:39\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"马奶提,哈密瓜(4个装),小黄瓜\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2792,\n" +
              "code: \"2100001279242\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 65500,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-21 22:11:42\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"菲律宾凤梨,辽宁葡萄,小黄瓜,野生苹果\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2773,\n" +
              "code: \"2000001277334\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 68800,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-20 22:14:34\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"菲律宾香蕉,无籽瓜,野生苹果\"\n" +
              "},\n" +
              "{\n" +
              "orderId: 2737,\n" +
              "code: \"1900001273702\",\n" +
              "radiateCenterId: 1,\n" +
              "userId: 7,\n" +
              "totalMoney: 101000,\n" +
              "status: 7,\n" +
              "payStatus: 2,\n" +
              "sendStatus: 2,\n" +
              "payway: 1,\n" +
              "gmtCreate: \"2015-10-19 21:35:02\",\n" +
              "shopName: \"水果无忧\",\n" +
              "itemsName: \"韩国梨,猕猴桃金果\"\n" +
              "}\n" +
              "]";
              
    //这是待解析的json字符串。
    
    long t1,t2;
    t1 =System.currentTimeMillis();
    List<MyOrderBean> list = JSONArray.parseArray(jsonString, MyOrderBean.class);
    t2 =System.currentTimeMillis();

    logError("fastjson  = " + (t2 - t1));

}

以及自己的解析代码:

public class OrderHelper {

   public static long t1,t2;

   public static List<MyOrderBean> getOrderList(JSONObject object){

      t1 =System.currentTimeMillis();

      JSONArray array = JsonUtil.getJsonArray(object, "data");
      List<MyOrderBean> list = CollectionUtil.newArrayList();
      for (int i = 0; i < array.length(); i++) {
         try {
            JSONObject obj = JsonUtil.getJsonObject(array.get(i));
            list.add(getOrder(obj));
         } catch (JSONException e) {
            e.printStackTrace();
         }
      }
      t2 =System.currentTimeMillis();

      LogUtil.logTagE("my useTime = " + (t2 - t1));

      return list;
   }
   
   public static MyOrderBean getOrder(JSONObject obj){
      MyOrderBean orders = new MyOrderBean();

      orders.setId(JsonUtil.getInt(obj, "orderId", 0));
      orders.setCode(JsonUtil.getString(obj, "code", ""));
      orders.setGmtCreate(JsonUtil.getString(obj, "gmtCreate", ""));
      orders.setItemName(JsonUtil.getString(obj, "itemsName", ""));
      orders.setItemNum(JsonUtil.getInt(obj, "itemNum", 0));
      orders.setPayWay(JsonUtil.getInt(obj, "payway", 0));
      orders.setShopName(JsonUtil.getString(obj, "shopName", ""));
      orders.setStatus(JsonUtil.getInt(obj, "status", 0));
      orders.setShopId(JsonUtil.getInt(obj, "shopId", 0));
      orders.setTotalMoney(PriceUtil.showPriceYang( JsonUtil.getDouble(obj, "totalMoney", 0.0d)));
      orders.setPayStatus(JsonUtil.getInt(obj, "payStatus", 1));
      orders.setSendStatus(JsonUtil.getInt(obj, "sendStatus", 1));
      
      return orders;
   }
}

运行结果如下:

结论如上、差距比较大。。。看到这个结果我就心安了,不说了我要去嘲讽我同学了。

其实总结了一下我不用fastjson的原因如下:

第一:每个项目,服务端的数据是多变的,根据不同的界面,服务端传回的数据是不一样的,这样就导致你整个实体里面可能有很多属性不是当前页面用得到的,fastjson的解析原理是通过反射找到所有get方法,于是再逐个比较解析。,使用fastjson解析无疑会多此一举。这可能是一个耗时长的原因,毕竟有很多无用的属性。

第二 :习惯自己写解析类,更加方便精确的针对每一个实体做解析,主要也是我自己写习惯了,闭着眼睛也知道怎么写,不过我这样有点小不方便,就是换一家公司之后,新的网络规范必须要重新适应,fastjson使用频率广泛我想也是有这点原因在里面。毕竟不用动脑直接一波流。

====================================分割线================================

   

    好久没写博客了,毕业两年来,做合伙人这么长时间,经历了很多艰难的时期,挺过了好几个,什么都干过,运营,产品,市场地推,物流跟车,仓库分拣,累的不要不要的,技术成长却很少,看书时间减少,个人安排时间不足,上周末跟网易的同学聊天扯淡,真心羡慕一心写代码的生活。大企业不管有多么多的诟病沉珂,但是不可否认那里聚集了很多各自领域都很优秀的人才,圈子决定眼界,至少技术上可以帮助更加快速成长,这是我在预感项目失败公司清算的时候自己应该怎么选择的感悟。最近几个月是公司从未有过的艰难时期,这一次,可能坚持不下去了。毕竟太年轻,积累太少,也因为年轻,可以多尝试几条路。

    很多年轻人(我自己也是)不喜欢大公司的环境,不习惯大公司的相处方式,整天吐槽臃肿不堪甚至浪费资源的公司结构和制度网上一直在讨论的,去大公司还是去小公司,大神们有无数的结果和比较,我小小平凡人一枚就不在此浪费字数了。你选择什么样的工作,什么样的环境,什么样规模的平台,优劣都有, 其实在我看来都无所谓,别忘了自己还年轻,走错路可以回头,就算不想回头也可以继续往下走。所以只要肯走,没什么可怕的。

    共勉。

时间: 2024-08-13 17:26:27

小测一下fastjson的速度的相关文章

小测几种python web server的性能

http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-wsgi,效果还不错.但还是想试试别的,比如传说中超级猛的meinheld什么的. 软硬件环境 硬件: 一台04年初购置的IBM X235服务器,CPU为Xeon 2.4G两颗,内存1G,100M网卡. 软件: Ubuntu Server 10.04 LTSApache 2.2.14Nginx 0.7.

Windbg CLR基础小测 《第六篇》

首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console.WriteLine("Hello, Windbg!"); Console.ReadKey(); } } } 在Debug目录中启动该程序,然后在Debug中附加该进程. 0:007> .load C:/WINDOWS/Microsoft.NET/Framework/v4.0.303

javascript typeof用法小测

<html xmlns="http://www.w3.org/1999/xhtml"> <head>     <title></title>     <script type="text/javascript">                                     function show(){                 //typeof后跟参数,返回的是表示该参数类型的字符串

随堂小测第19天

今天我们四个从下午4点到5点半聚在一起写建民安排的文档,顺便拉拉家常,很开心,在这里表扬一下李井明儿小童鞋,真的很负责. 另外,昨天结束了高考,表弟终于解脱了,替他高兴 我们的随堂小测在大家的不断努力下,终于完成了,还差一个logo 原文地址:https://www.cnblogs.com/daisy99lijing/p/10994225.html

课堂小测

/*信1805-3 20183769 赵常恒*/ package 课堂小测;import java.util.*;class ScoreInformation { private String stunumber; private String name; private double mathematicsscore; private double englishiscore; private double networkscore; private double databasescore;

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上

一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的访问速度仅比寄存器慢一些.但是,这一局面在上世纪90年代被打破了.CPU的频率大大提升,但内存总线的频率与内存芯片的性能却没有得到成比例的提升.并不是因为造不出更快的内存,只是因为太贵了.内存如果要达到目前CPU那样的速度,那么它的造价恐怕要贵上好几个数量级.所以,CPU的运算速度要比内存读写速度快

朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S

朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S 有关Spring Cloud Kubernates(以下简称SCK)详见https://github.com/spring-cloud/spring-cloud-kubernetes,在本文中我们主要测试三个功能: 使用Kubernetes服务发现配合Spring Cloud Ribbon做服务调用 读取Kubernetes的ConfigMap配置并且支持修改后动态刷新 Spring Bo

微信小程序之提高应用速度小技巧

作者:vicyao, 腾讯web前端开发 高级工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/294.html WeTest 导读 小程序科普类的文章已经很多了,今天这里讲的是针对小程序的优化方法,可以有效提高小程序的响应速度和用户体验.当然,开发体验也提高不少. 1.提高页面加载速度 在小程序这个环境下,怎样提高页面加载速度呢? 这个问题很大,我把问题具体一下,如何缩短从用户点击某个链接,到打开新页面的

S2小测--索引--视图

1.  关于Sql server 视图 视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询.视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目 标.理论上它可以像普通的物理表一样使用,例如增.删.改.查等,更新视图中的数据实际上是修改原始数据表.当然,当修改视图的时 候,其实是对基础表的修改,它就好像是一个代理.但因为有许多限制,所以在实际开发中一般视图仅做查询使用. 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据.从数据库系统内部来看,一个视图是由SEL