Производительность библиотек для парсинга JSON в Python
В одном из проектов потребовалось парсить достаточно объемные JSON файлы, отдаваемые API. Примерный размер файла 6 Мб и около 50000 записей. Стандартная библиотека работала достаточно неспешно и я решил сравнить производительность предлагаемых альтернатив.
Тестирование проводилось на виртуальной машине Ubuntu 10.10 32bit. Возможно, на 64 bit результаты будут отличаться. Время выполнения измерялось с помощью timeit.repeat(repeat=10, number=10) с последующим усреднением.
| Библиотека | parsing | parsing + serialization |
|---|---|---|
| simplejson | 2.162 | 5.182 |
| cjson | 2.395 | 7.851 |
| ujson | 2.416 | 5.524 |
| py-yajl | 3.830 | Killed |
| jsonlib | 4.081 | 10.155 |
| json | 5.209 | 9.764 |
Как видите, самой быстрой реализацией на данный момент является simplejson. Следом за ним идут cjson и ujson. cjson немного быстрее при парсинге, но значительно проигрывает при сериализации обратно в строку. Все три библиотеки примерно в два раза быстрее стандартного модуля json.
py-yajl, несмотря на заверения авторов обертки, во-первых, оказалась значительно медленнее нативных библиотек, во-вторых, была достаточно сложна в сборке и установке, ну и в-третьих, выдала «killed» в качестве результата теста на парсинг-сериализацию.