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

posted @ 2015-12-24 09:41  Bo-tree  阅读(92)  评论(0)    收藏  举报