Тесты 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 ответа

Вы не сделали ничего плохого.

В iOS 6 все изменилось. Apple значительно улучшила производительность NSJSONSerialization, При использовании iOS 6 и выше, это самый быстрый.

JSONKit также не обновлялся в течение года. Это отстает.

Интересно, что есть еще люди, которым небезразлична производительность парсера JSON;)

Около трех лет назад я разработал свой собственный анализатор JSON с целью сделать его быстрым и с небольшим объемом памяти. С тех пор мне было интересно, как это сравнивается с другими, особенно NSJSONSerialization и JSONKit. У меня есть ряд тестов, которые я иногда запускаю, чтобы проверить, как новые компиляторы и ОС улучшили парсеры. Я также разветвил стенд Бонто, исправил несколько ошибок, добавил несколько патологических JSON-файлов и также добавил свой собственный анализатор.

Что ж, я могу подтвердить, что в последние годы NSJSONSerialization был значительно улучшен Теперь он сопоставим с JSONKit для многих рабочих нагрузок. Если я правильно помню, определенный тест занял 690 мс для NSJSONSerialization iOS 5.0, в то время как сейчас он работает на 520 мс на iOS 6.1. JSONKit занял около 524 мс - и теперь с теми же источниками - он занимает около 500 мс, последний исключительно из-за лучших компиляторов.

Так как мне было любопытно, я собрал некоторые результаты, скомпилированные с Xcode (скоро будет доступно) и несколько скриншотов, сделанных с моего разветвленного теста Bonto.

Тест включает мою собственную библиотеку синтаксического анализатора (JPJson) в тест с именем "JPJsonData" (новейшая версия, которая еще не зарегистрирована в GitHub), в честном и сопоставимом тесте. Я гарантировал, что JSONKit скомпилирован со всеми включенными оптимизациями и отключенными утверждениями, чтобы он работал как можно быстрее.

Тест был выполнен на этом оборудовании, iPad 2 (второй вариант), со следующими характеристиками:

Имя системы: iPhone OS Версия системы: 6.1.3 Модель: iPad Локализованная модель: iPad Платформа: iPad2,2 Модель оборудования: K94AP Тип платформы: 14 Строка платформы: iPad 2G Частота процессора: 475,113 МГц Частота шины: 475,113 МГц Общая память: 502 Пользовательская память MByte: 419 MByte


Какой-то другой тестовый файл, в основном средний JSON:


JSON с преимущественно цифрами:


JSON с в основном случайными строками Unicode.

Эти строки JSON содержат символы "Unicode noncharacters" и "Unicode NULL". JSONKit не позволяет эти символы - таким образом, это терпит неудачу. JPJson не разрешает их по умолчанию, но у него есть опции, которые, когда установлены, разрешают эти символы в строках JSON:


Обновить

Я выполнил тест для iPhone 5s на iOS 7, как для 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

Я запускаю тесты на iPhone 4 (ios7) и iPhone 4S (ios 6.1), и NSJSONSerialization быстрее в обоих случаях.

введите описание изображения здесь

введите описание изображения здесь

Другие вопросы по тегам