<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
    沒有思考為什么這樣
    主站蜘蛛池模板: 日韩激情无码免费毛片| 日韩一区二区a片免费观看| 亚洲国产精品激情在线观看| 亚洲AV网一区二区三区| 国产精品冒白浆免费视频 | 国产亚洲精品美女久久久| 免费一级特黄特色大片 | 亚洲色偷拍另类无码专区| 一本久久A久久免费精品不卡| 亚洲精品动漫人成3d在线| 丰满人妻一区二区三区免费视频| 亚洲一区二区三区AV无码| 久久久久久久岛国免费播放| 久久青青草原亚洲av无码app| 91精品免费国产高清在线| 亚洲熟女综合一区二区三区| 国产一区二区三区免费看| j8又粗又长又硬又爽免费视频| 中文字幕亚洲综合久久男男| 久久午夜夜伦鲁鲁片无码免费| 综合自拍亚洲综合图不卡区| 免费三级毛片电影片| 自拍偷自拍亚洲精品播放| 亚洲免费在线观看| 99热在线免费播放| 亚洲日本一线产区和二线产区对比| 免费国产小视频在线观看| 美女视频黄的免费视频网页| 亚洲国产成人久久| 亚洲一级特黄无码片| 99re视频精品全部免费| 亚洲av无码无线在线观看| 亚洲精品无码成人片久久| 亚洲无砖砖区免费| 一级毛片在线免费播放| 亚洲国产精品人久久电影| 亚洲av无码天堂一区二区三区| 亚欧免费无码aⅴ在线观看| 亚洲色少妇熟女11p| 亚洲另类激情综合偷自拍图| 毛片a级毛片免费播放100|