zoukankan      html  css  js  c++  java
  • iOS5系统API和5个开源库的JSON解析速度测试

      

    iOS5系统API和5个开源库的JSON解析速度测试

    iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件。

     

    我们选择的测试对象包含下面的这几个框架,其中NSJSONSerialization是iOS5系统新增的JSON解析的API,需要iOS5的环境,如果您在更低的版本进行测试,应该屏蔽相应的代码调用。

     

    - [SBJSON (json-framework)](http://code.google.com/p/json-framework/)

    - [TouchJSON (from touchcode)](http://code.google.com/p/touchcode/)

    - [YAJL (objective-C bindings)](http://github.com/gabriel/yajl-objc)

    - [JSONKit](https://github.com/johnezang/JSONKit)

    - [NextiveJson](https://github.com/nextive/NextiveJson)

    -[NSJSONSerialization](http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40010946)

     

    我们选择了四个包含json格式的数据的文件进行测试。每一个文件进行100的解析动作,对解析的时间进行比较。

     

    工程包含以下的文件和框架:

     

    测试时间间隔的的代码的宏定义如下,其中计算的次数和解析的代码由外部调用传入:

    #define RunWithCount(count, description, expr)

    do {

    CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

    for(NSInteger i = 0; i < count; i++) {

             NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

             expr;

             [pool release];

    }

    CFTimeInterval took = CFAbsoluteTimeGetCurrent() - start;

    NSLog(@"%@ %0.3f", description, took);

    } while (0)

     

    这是外面调用的代码,设置读取的json文件和计算的次数,每一个函数在进行对应框架API的解析代码:

             JSONTest *test = [[JSONTest alloc] init];

             NSInteger count = 100;

            [test runWithResourceName:@"twitter_public.json" count:count];

             [test runWithResourceName:@"lastfm.json" count:count];

             [test runWithResourceName:@"delicious_popular.json" count:count];

             [test runWithResourceName:@"yelp.json" count:count];

     

    我们的测试的环境是Xcode 4.2和iOS5,计算次数是100次,这是计算的结果Log:

    2011-11-24 14:48:59.441 JSONPerfTest[9716:207] SBJSON-twitter_public.json 0.335

    2011-11-24 14:48:59.625 JSONPerfTest[9716:207] YAJL-twitter_public.json 0.183

    2011-11-24 14:49:00.095 JSONPerfTest[9716:207] TouchJSON-twitter_public.json 0.469

    2011-11-24 14:49:00.226 JSONPerfTest[9716:207] JSONKit-twitter_public.json 0.130

    2011-11-24 14:49:00.390 JSONPerfTest[9716:207] NextiveJson-twitter_public.json 0.164

    2011-11-24 14:49:00.504 JSONPerfTest[9716:207] NSJSONSerialization-twitter_public.json 0.113

    2011-11-24 14:49:01.196 JSONPerfTest[9716:207] SBJSON-lastfm.json 0.691

    2011-11-24 14:49:01.516 JSONPerfTest[9716:207] YAJL-lastfm.json 0.320

    2011-11-24 14:49:02.367 JSONPerfTest[9716:207] TouchJSON-lastfm.json 0.850

    2011-11-24 14:49:02.580 JSONPerfTest[9716:207] JSONKit-lastfm.json 0.212

    2011-11-24 14:49:02.861 JSONPerfTest[9716:207] NextiveJson-lastfm.json 0.280

    2011-11-24 14:49:03.039 JSONPerfTest[9716:207] NSJSONSerialization-lastfm.json 0.177

    2011-11-24 14:49:03.546 JSONPerfTest[9716:207] SBJSON-delicious_popular.json 0.506

    2011-11-24 14:49:03.787 JSONPerfTest[9716:207] YAJL-delicious_popular.json 0.240

    2011-11-24 14:49:04.460 JSONPerfTest[9716:207] TouchJSON-delicious_popular.json 0.672

    2011-11-24 14:49:04.668 JSONPerfTest[9716:207] JSONKit-delicious_popular.json 0.207

    2011-11-24 14:49:04.904 JSONPerfTest[9716:207] NextiveJson-delicious_popular.json 0.234

    2011-11-24 14:49:05.072 JSONPerfTest[9716:207] NSJSONSerialization-delicious_popular.json 0.168

    2011-11-24 14:49:05.434 JSONPerfTest[9716:207] SBJSON-yelp.json 0.361

    2011-11-24 14:49:05.633 JSONPerfTest[9716:207] YAJL-yelp.json 0.198

    2011-11-24 14:49:06.154 JSONPerfTest[9716:207] TouchJSON-yelp.json 0.519

    2011-11-24 14:49:06.310 JSONPerfTest[9716:207] JSONKit-yelp.json 0.155

    2011-11-24 14:49:06.497 JSONPerfTest[9716:207] NextiveJson-yelp.json 0.186

    2011-11-24 14:49:06.637 JSONPerfTest[9716:207] NSJSONSerialization-yelp.json 0.140

     

    将上面的数据整理成下面的图表:

     

    测试的结果显示,系统的API的解析速度最快,我们在工程项目中选择使用,也是应用较为广泛的SBJSON的解析速度为倒数第二差,令我大跌眼镜。

    与系统API较为接近的应该是JSONKit。

     

    这里没有对API的开放接口和使用方式进行比较,若单纯基于以上解析速度的测试:

    1:iOS5应该选择系统的API进行

    2:不能使用系统API的应该选择JSONKit

     

    程序附件:

    http://arthurchen.blog.51cto.com/attachment/201111/2483760_1322144362.zip

    本文word文档:

    http://arthurchen.blog.51cto.com/attachment/201111/2483760_1322144787.zip

  • 相关阅读:
    [Beta阶段]第四次Scrum Meeting
    [Beta阶段]第三次Scrum Meeting
    [Beta阶段]第二次Scrum Meeting
    [Beta阶段]第一次Scrum Meeting
    [Alpha阶段]事后分析博客
    [Alpha阶段]无人转会申请
    Server MyEclipse Tomcat v7.0 was unable to start within 45 seconds. If the server requires more time
    关于单选框、下拉框、复选框的数据回显问题以及全选和全不选
    学习spring和spring mvc过程中遇到的一些问题
    springmvc常用注解之@Controller和@RequestMapping
  • 原文地址:https://www.cnblogs.com/new0801/p/6175880.html
Copyright © 2011-2022 走看看