JSONKit基准测试

时间:2013-04-25 15:16:54

标签: ios jsonkit

我从中提取代码 http://www.bonto.ch/blog/2011/12/08/json-libraries-for-ios-comparison-updated/并在我的本地计算机上对其进行了测试。

我对结果感到惊讶, NSJSonSerialization 提供了比 JSONKit 更好的性能。

NSJSonSerialization在速度方面是否真的超过了JSONKit,还是我做错了什么?

twitter_timeline_json.png

twitter_timeline.json

repeat_json.png

repeat.json

random_json.png

random.json

3 个答案:

答案 0 :(得分:7)

你没有做错任何事。

iOS 6中的情况发生了变化.Apple大大提高了NSJSONSerialization的性能。使用iOS 6及更高版本时,它是最快的。

JSONKit也未在一年内更新。它落后了。

答案 1 :(得分:4)

有趣的是,仍然有人关心JSON解析器性能;)

大约三年前,我开发了自己的JSON解析器,其目标是使其快速且内存占用率低。从那时起,我对它与其他人的比较感兴趣,尤其是NSJSONSerialization和JSONKit。我偶尔会运行一些基准测试,以检查新的编译器和操作系统如何改进解析器。我还分叉了Bonto的工作台,修复了一些错误,添加了一些病态的JSON文件并添加了我自己的解析器。

嗯,我可以确认,在过去几年中,NSJSONSerialization的表现得到了很大改善。对于许多工作负载,它现在可与JSONKit相媲美。如果我没记错的话,NSJSONSerialization iOS 5.0的测试花了690ms,而现在iOS 6.1的测试时间为520ms。 JSONKit花了大约524ms - 现在使用相同的源 - 它需要大约500ms,后者仅仅是因为更好的编译器。

由于我很好奇,我收集了一些结果,使用Xcode(很快就可以)编辑,并从我的分叉Bonto的基准标记中获取了一些截图。

该测试在测试中包含我自己的解析器库(JPJson),名称为“JPJsonData”(尚未在GitHub中签入的最新版本),公平且可比较的测试。我确信,JSONKit已经编译,启用了所有优化,并禁用了断言,因此它尽可能快。

测试已经在这个硬件上运行,iPad 2(第二个版本),具有以下规格:

  

系统名称:iPhone OS   系统版本:6.1.3   型号:iPad   本地化型号:iPad   平台:iPad2,2   硬件型号:K94AP   平台类型:14   平台字符串:iPad 2G   CPU频率:475.113 MHz   总线频率:475.113 MHz   总内存:502 MByte   用户记忆:419 MByte

enter image description here


其他一些测试文件,几乎是普通的JSON:

enter image description here


主要是数字的JSON:

enter image description here


JSON主要是随机Unicode字符串。

这些JSON字符串包含“Unicode非字符”和“Unicode NULL”字符。 JSONKit不允许这些字符 - 因此失败。默认情况下JPJson不允许它们,但是它有选项,在设置时允许JSON字符串中的那些字符:

enter image description here


更新

我在iOS 7上运行iPhone 5s的基准测试,适用于32位和64位。

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

答案 2 :(得分:2)

我在iPhone 4(ios7)和iPhone 4S(ios 6.1)上运行测试,两种情况下NSJSONSerialization都更快。

enter image description here

enter image description here