2013-04-25 3 views
14

Ich zog den Code von http://www.bonto.ch/blog/2011/12/08/json-libraries-for-ios-comparison-updated/ und testete es auf meinem lokalen Rechner.JSONKit Benchmarks

ich von den Ergebnissen und NSJSonSerialization gab viel bessere Leistung als JSONKit überrascht.

Hat NSJSonSerialization JSONKit in Sachen Geschwindigkeit wirklich überholt oder habe ich etwas falsch gemacht?

twitter_timeline_json.png

twitter_timeline.json

repeat_json.png

repeat.json

random_json.png

random.json

+0

Schön, diese Ergebnisse zu sehen, danke! Ich habe vorher JSONKit benutzt, bin aber zu 'NSJSONSerialization' gewechselt, weil es schnell war und mir eine andere externe Bibliothek erspart. Aber hä, was hättest du falsch machen können, wenn du grundsätzlich zwei Methodenaufrufe verglichen hast? –

+0

Laufen Sie diese auf dem Simulator oder auf einem Gerät? –

+0

Diese wurden auf dem iPhone 6.1 Simulator ausgeführt. –

Antwort

7

Sie haben nichts falsch gemacht.

Die Dinge haben sich in iOS 6 geändert. Apple hat die Leistung von NSJSONSerialization stark verbessert. Bei Verwendung von iOS 6 und höher ist es am schnellsten.

JSONKit wurde auch in einem Jahr nicht aktualisiert. Es fällt zurück.

+3

+1: "JSONKit wurde auch in einem Jahr nicht aktualisiert." Ja, es scheint JSONKit Repo ist tot ...:/ –

2

Ich führe die Tests auf einem iPhone 4 (iOS7) und iPhone 4S (iOS 6.1) und NSJSONSerialization ist in beiden Fällen schneller.

enter image description here

enter image description here

+4

Um einen fairen Vergleich zu ermöglichen, müssen Sie sicherstellen, dass Sie mit korrekten Build-Einstellungen kompilieren, die NSAsssert-Makros deaktivieren: Definieren Sie in "Präprozessor-Makros" 'NDEBUG' und' NS_BLOCK_ASSERTIONS'. Außerdem müssen Sie den Test "JSONKitData" vergleichen, da Sie sonst JSONKit einen "NSString" einspeisen, der zuerst in NSData konvertiert werden muss. – CouchDeveloper

4

Interessanterweise gibt es immer noch Menschen gibt, die über JSON-Parser Leistung kümmern;)

Vor etwa drei Jahren habe ich meine eigene JSON-Parser mit dem Ziel entwickelt, um es schnell und mit einem geringen Speicherfußdruck. Seitdem war ich interessiert, wie es mit anderen verglichen wird, besonders mit NSJSONSerialization und JSONKit. Ich habe eine Reihe von Benchmarks, die ich gelegentlich ausführen, um zu überprüfen, wie neue Compiler und Betriebssysteme die Parser verbessert haben. Ich habe auch Bontos Bank gegabelt, ein paar Fehler korrigiert, ein paar pathologische JSON-Dateien hinzugefügt und meinen eigenen Parser hinzugefügt.

Nun, ich kann bestätigen, dass in den letzten Jahren die Leistung von NSJSONSerialization wurde stark verbessert. Es ist jetzt vergleichbar mit JSONKit für viele Arbeitslasten. Wenn ich mich recht erinnere, dauerte ein bestimmter Test 690ms für NSJSONSerialization iOS 5.0, während es jetzt bei 520ms auf iOS 6.1 läuft. JSONKit hat ungefähr 524 ms gebraucht - und jetzt mit den gleichen Quellen - es dauert ungefähr 500 ms, letzteres allein wegen besserer Compiler.

Da ich neugierig war, sammelte ich einige Ergebnisse, kompiliert mit Xcode (bald verfügbar) und ein paar Screenshots von meiner gespaltenen Bonto-Benchmark.

Der Test beinhaltet meine eigene Parser-Bibliothek (JPJson) im Test mit dem Namen "JPJsonData" (die neueste Version, die noch nicht in GitHub eingecheckt ist), in einem fairen und vergleichbaren Test.Ich habe sichergestellt, dass JSONKit mit allen aktivierten Optimierungen kompiliert und Assertionen deaktiviert wurde, so dass es so schnell wie möglich ist.

Der Test auf dieser Hardware ausgeführt wurde, ein iPad 2 (die zweite Variante), mit diesen Spezifikationen:

System Name: iPhone OS Systemversion: 6.1.3 Modell: iPad Modell lokalisierte: iPad Plattform: iPad2,2 Hardware Modell: K94AP Plattform Typ: 14 Platform String: iPad 2G CPU-Frequenz: 475,113 MHz BUS Frequenz: 475,113 MHz Gesamtspeicher: 502 MByte User-Speicher: 419 MByte

enter image description here


Einige andere Test-Datei, so ziemlich durchschnittlich JSON:

enter image description here


JSON mit meist Zahlen:

enter image description here


JSON mit meist zufällig Unicode-Strings.

Diese JSON-Zeichenfolgen enthalten "Unicode noncharacters" und "Unicode NULL" Zeichen. JSONKit erlaubt diese Zeichen nicht - also ist fehlgeschlagen. JPJson wird sie standardmäßig nicht zulassen, aber es hat Optionen, die als Satz, diese Zeichen in JSON Strings erlauben:

enter image description here


aktualisieren

lief ich den Maßstab für ein iPhone 5s auf iOS 7, für 32-Bit und 64-Bit.

JSONKit konnte nicht für 64-Bit kompiliert werden.

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 

Alle Zeiten in Millisekunden.

----------------------------------- 
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 
+1

-1,00 ms ??????? – jjxtra

+2

@PsychoDad Ja, schneller als Licht - nein, das bedeutet einfach, dass JSON Kit einen Fehler gefunden hat. ;) Die Details: JSONKit erlaubt keine Unicode-NULL-Zeichen und keine Unicode-Zeichen. Normalerweise treten sie nicht in vernünftigem JSON auf, aber streng sind sie erlaubt. Die "sample.json" enthält zufällig erstellte JSON, daher kommt es gelegentlich vor, dass Unicode-Nicht-Zeichen erstellt wurden. – CouchDeveloper

+0

Haben Sie auf dem iPhone 5/5S oder iPad 4/iPad Air getestet? – jjxtra

Verwandte Themen