iOS5系統(tǒng)API和5個(gè)開(kāi)源庫(kù)的JSON解析速度測(cè)試
iOS5新增了JSON解析的API,我們將其和其他五個(gè)開(kāi)源的JSON解析庫(kù)進(jìn)行了解析速度的測(cè)試,下面是測(cè)試的結(jié)果和工程代碼附件。
我們選擇的測(cè)試對(duì)象包含下面的這幾個(gè)框架,其中NSJSONSerialization是iOS5系統(tǒng)新增的JSON解析的API,需要iOS5的環(huán)境,如果您在更低的版本進(jìn)行測(cè)試,應(yīng)該屏蔽相應(yīng)的代碼調(diào)用。
- [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)
我們選擇了四個(gè)包含json格式的數(shù)據(jù)的文件進(jìn)行測(cè)試。每一個(gè)文件進(jìn)行100的解析動(dòng)作,對(duì)解析的時(shí)間進(jìn)行比較。
工程包含以下的文件和框架:
測(cè)試時(shí)間間隔的的代碼的宏定義如下,其中計(jì)算的次數(shù)和解析的代碼由外部調(diào)用傳入:
#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) |
這是外面調(diào)用的代碼,設(shè)置讀取的json文件和計(jì)算的次數(shù),每一個(gè)函數(shù)在進(jìn)行對(duì)應(yīng)框架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]; |
我們的測(cè)試的環(huán)境是Xcode 4.2和iOS5,計(jì)算次數(shù)是100次,這是計(jì)算的結(jié)果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 |
將上面的數(shù)據(jù)整理成下面的圖表:
測(cè)試的結(jié)果顯示,系統(tǒng)的API的解析速度最快,我們?cè)诠こ添?xiàng)目中選擇使用,也是應(yīng)用較為廣泛的SBJSON的解析速度為倒數(shù)第二差,令我大跌眼鏡。
與系統(tǒng)API較為接近的應(yīng)該是JSONKit。
這里沒(méi)有對(duì)API的開(kāi)放接口和使用方式進(jìn)行比較,若單純基于以上解析速度的測(cè)試:
1:iOS5應(yīng)該選擇系統(tǒng)的API進(jìn)行
2:不能使用系統(tǒng)API的應(yīng)該選擇JSONKit
程序附件:
http://arthurchen.blog.51cto.com/attachment/201111/2483760_1322144362.zip
本文word文檔:
http://arthurchen.blog.51cto.com/attachment/201111/2483760_1322144787.zip