我从http://www.bonto.ch/blog/2011/12/08/json-libraries-for-ios-comparison-updated/中提取了代码,并在本地机器上进行了测试。
我对这个结果感到惊讶,NSJSonSerialization的性能比JSONKit要好得多。
NSJSonSerialization在速度上真的超过了JSONKit吗?还是我做错了什么?

twitter_timeline.json

repeat.json

random.json
发布于 2013-08-11 10:40:39
你没做错什么。
iOS 6的情况发生了变化,苹果大大提高了NSJSONSerialization的性能。当使用iOS 6和更高版本时,它是最快的。
JSONKit也已经一年没有更新了。它落后了。
发布于 2013-09-11 12:33:36
有趣的是,仍然有人关心JSON解析器的性能;)
大约三年前,我开发了自己的JSON解析器,其目标是使其快速,并具有低内存脚印。从那以后,我对它与其他人的比较感兴趣,尤其是NSJSONSerialization和JSONKit。我确实有一些我偶尔运行的工作台标记,以检查新编译器和OSs是如何改进解析器的。我还分叉了Bonto的工作台,修复了一些错误,添加了一些病态的JSON文件,并添加了我自己的解析器。
我可以肯定的是,在过去的几年里,NSJSONSerialization的性能有了很大的提高。在许多工作负载上,它现在可与JSONKit相媲美。如果我没记错的话,NSJSONSerialization iOS 5.0需要690 on的测试,而现在iOS 6.1的测试速度是520 on。JSONKit花费了大约524 to -现在有了相同的源代码--花费了大约500 to,后者仅仅是因为更好的编译器。
由于我很好奇,我收集了一些结果,用Xcode编译(很快就可用了)和一些截图,这些截图都是从我的分叉Bonto的工作台标记上拍摄的。
测试包括我自己的解析器库(JPJson),在测试中名为"JPJsonData“(尚未签入GitHub的最新版本),这是一个公平和可比较的测试。我保证,JSONKit已经被编译,并且启用了所有的优化,并且禁用了断言,所以它是尽可能快的。
这个测试已经在这个硬件上运行,它是一个iPad 2(第二个变体),具有以下规格:
系统名称: iPhone OS系统版本: 6.1.3模型: iPad本地化模型: iPad平台: iPad 2,2硬件模型: K94AP平台类型: 14平台字符串:iPad 2G CPU频率: 475.113 MHz总线频率: 475.113 MHz总内存: 502 MByte用户内存: 419 MByte

其他一些测试文件,几乎一般的JSON:

主要是数字的JSON:

具有大多数随机Unicode字符串的JSON。
这些JSON字符串确实包含"Unicode非字符“和"Unicode空”字符。JSONKit不允许这些字符-因此是失败的。JPJson默认不允许这些字符,但是它有一些选项,在设置这些选项时,允许JSON中的字符:

更新
我在iPhone 7上运行了32位和64位iOS 5的基准测试。
JSONKit未能为64位进行编译.
System Name: iPhone OS
System Version: 7.0.4
Model: iPhone
Localized Model: iPhone
Platform: iPhone6,2
Hardware Model: N53AP
Platform Type: 18
Platform String: Unknown iPhone
CPU Frequency: 0 MHz
BUS Frequency: 0 MHz
Total Memory: 999 MByte
User Memory: 858 MByte所有的时间都在毫秒之内。
-----------------------------------
twitter_timeline.json
| Library | 32-bit | 64-bit |
|---------------------|--------:|--------:|
| JSONKitData | 1.68 | *)|
| JPJsonData | 1.16 | 1.29 |
| NSJSONSerialization | 2.44 | 2.21 |
| SBJsonData | 6.05 | 6.69 |
-----------------------------------
appache_builds.json
| Library | 32-bit | 64-bit |
|---------------------|--------:|--------:|
| JSONKitData | 2.80 | *) |
| JPJsonData | 3.21 | 3.52 |
| NSJSONSerialization | 3.23 | 4.17 |
| SBJsonData | 10.41 | 11.75 |
-----------------------------------
mesh.json
| Library | 32-bit | 64-bit |
|---------------------|--------:|--------:|
| JSONKitData | 87.64 | *) |
| JPJsonData | 25.46 | 20.34 |
| NSJSONSerialization | 144.25 | 34.25 |
| SBJsonData | 105.60 | 107.70 |
-----------------------------------
sample.json
| Library | 32-bit | 64-bit |
|---------------------|--------:|--------:|
| JSONKitData | failed | *) |
| JPJsonData | 5.97 | 6.39 |
| NSJSONSerialization | 18.94 | 13.66 |
| SBJsonData | failed | 88.19 |
-----------------------------------
random.json
| Library | 32-bit | 64-bit |
|---------------------|--------:|--------:|
| JSONKitData | 23.01 | *) |
| JPJsonData | 17.69 | 20.62 |
| NSJSONSerialization | 28.83 | 28.60 |
| SBJsonData | 82.93 | 82.74 |
*) Failed to compile发布于 2013-09-11 09:26:33
我在iPhone 4 (ios7)和iPhone 4S (IOS6.1)上运行测试,在这两种情况下NSJSONSerialization都更快。


https://stackoverflow.com/questions/16218583
复制相似问题