<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
    沒有思考為什么這樣
    主站蜘蛛池模板: 国产亚洲精品自在线观看| 国产精品免费电影| 人碰人碰人成人免费视频| 女人张开腿等男人桶免费视频| 亚洲色偷偷av男人的天堂 | 青草青草视频2免费观看| 国产在线观看免费不卡| 国产青草亚洲香蕉精品久久| 在线观看免费亚洲| 91久久亚洲国产成人精品性色| 人妻无码久久一区二区三区免费| 99ri精品国产亚洲| 蜜桃视频在线观看免费网址入口| 亚洲色偷偷偷综合网| 最近2019年免费中文字幕高清 | 亚洲精品无码高潮喷水A片软| 黄网址在线永久免费观看| 精品国产日韩亚洲一区在线| 无码国产亚洲日韩国精品视频一区二区三区| 免费人成大片在线观看播放电影| 亚洲成av人片天堂网老年人| 国产精品亚洲精品观看不卡| 夜夜嘿视频免费看| 一级毛片aa高清免费观看| 亚洲国产另类久久久精品| 黄页网站在线观看免费高清| 亚洲色大网站WWW永久网站| 亚洲综合色成在线播放| 美丽的姑娘免费观看在线播放 | 无遮挡国产高潮视频免费观看| 黑人大战亚洲人精品一区| 特级精品毛片免费观看| 久久精品国产亚洲αv忘忧草| 免费少妇a级毛片人成网| 青柠影视在线观看免费高清| 国产成人精品日本亚洲网址| 亚洲一级片内射网站在线观看| 在线免费观看国产| 免费国产黄网站在线观看动图| 亚洲大片在线观看| 精品一区二区三区免费毛片爱|