<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://m.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
    沒有思考為什么這樣
    主站蜘蛛池模板: 成人精品国产亚洲欧洲| 成人免费AA片在线观看| 亚洲AV中文无码乱人伦在线视色| 亚洲午夜无码片在线观看影院猛 | 亚洲免费视频网站| 拍拍拍无挡视频免费观看1000| 99久久久精品免费观看国产| 亚洲综合图片小说区热久久| 亚洲精品视频免费在线观看| 亚洲国产av一区二区三区丶| 国产免费不卡v片在线观看| 亚洲宅男精品一区在线观看| 成年人免费网站在线观看| 亚洲AV永久无码天堂影院| 一级毛片在线观看免费| 亚洲一区免费视频| 国产极品粉嫩泬免费观看| 亚洲国产精品乱码在线观看97 | 久久久久久久综合日本亚洲| 成人久久免费网站| 亚洲欧洲一区二区| 国产精品无码免费播放| 亚洲伊人tv综合网色| 国产成人精品免费午夜app | 国产高清免费的视频| 人成电影网在线观看免费| 亚洲国产一区二区三区青草影视| 一区二区三区免费看| 永久免费bbbbbb视频| 又粗又长又爽又长黄免费视频| 成人免费男女视频网站慢动作| 亚洲精品国产福利在线观看| 精品国产免费观看| 亚洲宅男精品一区在线观看| 亚洲国产精品一区二区第四页| 亚洲av无码专区亚洲av不卡| 亚洲人色婷婷成人网站在线观看| 激情吃奶吻胸免费视频xxxx| 亚洲五月六月丁香激情| 国产精品免费视频一区| 免费女人高潮流视频在线观看|