15

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

繰り返し.json

random_json.png

ランダム.json

4

3 に答える 3

7

あなたは何も悪いことをしていません。

iOS 6 では状況が変わりました。Apple は のパフォーマンスを大幅に改善しましたNSJSONSerialization。iOS 6以上の場合は最速です。

JSONKit も 1 年更新されていません。遅れています。

于 2013-08-11T10:40:39.540 に答える
4

興味深いことに、JSON パーサーのパフォーマンスを気にする人がまだいます ;)

約 3 年前、私は独自の JSON パーサーを開発しました。その目標は、高速でメモリ フットプリントが少ないことです。それ以来、他のもの、特に NSJSONSerialization と JSONKit との比較に興味がありました。新しいコンパイラと OS がパーサーをどのように改善したかを確認するために、ときどき実行するベンチマークがいくつかあります。また、Bonto のベンチをフォークし、いくつかのエラーを修正し、いくつかの異常な JSON ファイルを追加し、独自のパーサーも追加しました。

ここ数年で、 のパフォーマンスがNSJSONSerialization大幅に向上したことを確認できます。現在、多くの作業負荷で JSONKit に匹敵します。私の記憶が正しければ、あるテストでは NSJSONSerialization iOS 5.0 で 690 ミリ秒かかりましたが、iOS 6.1 では現在 520 ミリ秒で実行されています。JSONKit は約 524 ミリ秒かかりましたが、現在は同じソースを使用していますが、約 500 ミリ秒かかります。後者は、コンパイラが優れているためです。

興味があったので、いくつかの結果を集め、Xcode (近日公開予定) でコンパイルし、分岐した Bonto のベンチマークからいくつかのスクリーンショットを取得しました。

テストには、公平で比較可能なテストで、「JPJsonData」という名前のテストに独自のパーサー ライブラリ (JPJson) (まだ GitHub にチェックインされていない最新バージョン) が含まれています。JSONKit は、可能な限り高速になるように、すべての最適化を有効にしてアサーションを無効にしてコンパイルされていることを確認しました。

テストは、次の仕様の iPad 2 (2 番目のバリアント) であるこのハードウェアで実行されました。

システム名: iPhone OS システム バージョン: 6.1.3 モデル: iPad ローカライズ モデル: iPad プラットフォーム: iPad2、2 ハードウェア モデル: K94AP プラットフォーム タイプ: 14 プラットフォーム文字列: iPad 2G CPU 周波数: 475.113 MHz バス周波数: 475.113 MHz 合計メモリ: 502メガバイト ユーザー メモリ: 419 メガバイト

ここに画像の説明を入力


他のテスト ファイル、ほぼ平均的な JSON:

ここに画像の説明を入力


ほとんどが数値の JSON:

ここに画像の説明を入力


ほとんどがランダムな Unicode 文字列を含む JSON。

これらの JSON 文字列には、「Unicode 非文字」および「Unicode NULL」文字が含まれています。JSONKit はこれらの文字を許可していないため、失敗します。JPJson はデフォルトでは許可しませんが、設定すると JSON 文字列でこれらの文字を許可するオプションがあります。

ここに画像の説明を入力


アップデート

32 ビットと 64 ビットの両方について、iOS 7 で iPhone 5s のベンチマークを実行しました。

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-11T12:33:36.860 に答える