<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    幾種常用JSON庫的性能測試。

    Posted on 2010-03-11 18:00 BearRui(AK-47) 閱讀(6222) 評論(3)  編輯  收藏 所屬分類: Java
    隨著AJAX的火熱應用,JSON也越來越被重視,隨之而來的就是眾多的JSON庫,下面對常用的3個JSON庫(json-lib,jackson,gson)進行性能測試,看下結果如何:

    一. 測試環境
    該測試只是在本人電腦上進行測試,每次測試前都重啟tomcat,清空緩存,日志等。開的程序也一樣,3次測試測試環境相差無幾。
    json-lib版本:json-lib-2.3-jdk15(最新)
    jackson版本 : 1.4.3(最新)
    gson : 1.4 (最新)
    測試工具:apache帶的ab工具

    ??二. 測試代碼
    ?? ? ??
    1.先定義用于序列化成JSON的Bean,其中字段longTime需要在序列化的過程中被忽略,不輸出:
    JsonEntity

    ?? ? ??2. 因json-lib不能直接設置日期的轉換方式,需要寫1個Processor的類
    DateJsonValueProcessor

    ?? ? ??3. 寫1個輔助類JsonTestFactory:
    public?class?JsonTestFactory?{
    ????
    static?JsonConfig?jc;
    ????
    static?Gson?gson;
    ????
    static?ObjectMapper?mapper;

    ????
    public?static?ObjectMapper?getMapper(){
    ????????
    if(mapper?==?null){
    ????????????mapper?
    =?new?ObjectMapper();
    ????????????SerializationConfig?sc?
    =?mapper.getSerializationConfig();
    ????????????sc.setDateFormat(
    new?SimpleDateFormat("yyyy-MM-dd"));
    ????????????mapper.setSerializationConfig(sc);
    ????????}
    ????????
    return?mapper;
    ????}

    ????
    public?static?Gson?getGson(){
    ????????
    if(gson?==?null){
    ????????????GsonBuilder?gb?
    =?new?GsonBuilder();
    ????????????gb.setDateFormat(
    "yyyy-MM-dd");
    ????????????gb.excludeFieldsWithoutExposeAnnotation();
    ????????????gson?
    =?gb.create();
    ????????}
    ????????
    return?gson;
    ????}

    ????
    public?static?JsonConfig?getJsonConfig()?{
    ????????
    if(jc==null){
    ????????????jc?
    =?new?JsonConfig();
    ????????????jc.registerJsonValueProcessor(Date.
    class,?new?DateJsonValueProcessor("yyyy-MM-dd"));
    ????????????jc.registerPropertyExclusion(JsonEntity.
    class,"longTime");
    ????????}
    ????????
    return?jc;
    ????}
    }

    ?? ? ?4、下面是4個JSP頁面的代碼,json-lib使用了2種不同的方式進行測試:
    ?? ? ? ? ??jsonlib1.jsp 代碼:
    ????????????
    JsonEntity?je?
    =?new?JsonEntity(1);
    ????????????
    out.println(JSONSerializer.toJSON(je,entity.JsonTestFactory.getJsonConfig()).toString());
    %>]]>

    ?? ? ? ? ?jsonlib2.jsp 代碼:

    ????????????DateFormat?dateFormat?
    =?new?SimpleDateFormat("yyyy-MM-dd");
    ????????????JSONObject?json?
    =?new?JSONObject();
    ????????????JsonEntity?je?
    =?new?JsonEntity(1);
    ????????????json.element(
    "id",?je.getId());
    ????????????json.element(
    "name",?je.getName());
    ????????????json.element(
    "money",?je.getMoney());
    ????????????json.element(
    "date",?dateFormat.format(je.getDate()));
    ????????????out.println(json.toString());
    ????????
    %>]]>

    ?? ? ? ? ?jackson,jsp

    ????????????JsonEntity?je?
    =?new?JsonEntity(1);
    ????????????out.println(entity.JsonTestFactory.getMapper().writeValueAsString(je));
    ????????
    %>]]>

    ?? ? ? ??gson.jsp

    ????????????JsonEntity?je?
    =?new?JsonEntity(1);
    ????????????out.println(entity.JsonTestFactory.getGson().toJson(je));
    ????????
    %>]]>

    三、測試結果
    ?? ? ??測試結果中只需關注Requests per second(平均每秒處理的請求數),Time per request(平均每個請求處理的時間)

    1、ab 測試條件: 發送5000個請求,并發數為10。

    ??jsonlib1.jspjsonlib2.jsp?jackson.jsp?gson.jsp?
    ?Concurrency Level?10?10?10?10
    ?Time taken for tests?3.016 seconds?3.078 seconds?2.859 seconds?3.234 seconds
    ?Complete requests?5000?5000?5000?5000
    ?Requests per second?1658.03 [#/sec]?1624.37 [#/sec]?1748.63 [#/sec]?1545.89 [#/sec]
    ?Time per request?6.031 [ms]?6.156 [ms]?5.719 [ms]?6.469 [ms]

    1、ab 測試條件: 發送30000個請求,并發數為50。

    ??jsonlib1.jspjsonlib2.jsp?jackson.jsp?gson.jsp?
    ?Concurrency Level?50?50?10?10
    ?Time taken for tests11.359 seconds?12.047 seconds?10.922 seconds?13.391 seconds
    ?Complete requests?30000?30000?30000?30000
    ?Requests per second?2640.99 [#/sec]?2490.27 [#/sec]?2746.78 [#/sec]?2240.37 [#/sec]
    ?Time per request?18.932 [ms]20.078 [ms]?18.203 [ms]?22.318 [ms]


    google的gson傳說性能比較好,不知道為什么這次測試性能這么有問題。jackson的還是非常不錯的。

    [作者]:BearRui(AK-47)
    [博客]: http://www.tkk7.com/bearrui/
    [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: 幾種常用JSON庫的性能測試。  回復  更多評論   

    2010-03-12 12:04 by BearRui(AK-47)
    @凡客誠品官方網站
    沒看明白你的意思?

    # re: 幾種常用JSON庫的性能測試。  回復  更多評論   

    2010-04-06 22:33 by airfan
    這種測法大頭都給http連接和輸入輸出了,json序列化本身開銷忽略不計,測個毛

    # re: 幾種常用JSON庫的性能測試。  回復  更多評論   

    2013-09-24 15:35 by adsf
    沒有思考為什么這樣
    主站蜘蛛池模板: 97国产在线公开免费观看| 精品一区二区三区无码免费直播| 香蕉免费一级视频在线观看| 国产午夜免费福利红片| 亚洲成a∧人片在线观看无码| 日韩午夜免费视频| 亚洲av无一区二区三区| 国产免费131美女视频| 国产精品亚洲一区二区三区| 九月婷婷亚洲综合在线| 国产JIZZ中国JIZZ免费看| 亚洲日韩精品一区二区三区| baoyu122.永久免费视频| 亚洲视频在线观看| 在线观看日本免费a∨视频| 亚洲成av人片在线天堂无| 亚洲av无码国产精品色在线看不卡| 免费一区二区无码视频在线播放| 国产亚洲成人久久| 国产精品白浆在线观看免费| 亚洲一级毛片在线观| 国产精品jizz在线观看免费| 香蕉视频在线免费看| 亚洲人成电影在线天堂| 99精品全国免费观看视频| 免费高清A级毛片在线播放| a级亚洲片精品久久久久久久| 久久免费的精品国产V∧| 亚洲熟妇无码八V在线播放| 亚洲AV无码乱码在线观看| 久久99热精品免费观看动漫| 亚洲kkk4444在线观看| 亚洲综合久久夜AV | 4虎1515hh永久免费| 国产成人va亚洲电影| 亚洲VA中文字幕不卡无码| 成年人视频在线观看免费| 91国内免费在线视频| 7777久久亚洲中文字幕| 在线亚洲精品自拍| 成人免费一区二区无码视频|