Иследование пакетов JSON
Из постановки:
JSON: сравнить пакеты
Ivan Korjavin
•
Вчера
100 баллов
Срок сдачи: Завтра, 11:00
- encoding/json
- jsoniter
- jsonparser
Что установил
go get github.com/json-iterator/go
go get github.com/buger/jsonparser
Я так понял что сравнить их можно по производительности и врядли можно по функциональности
так как jsonparser
- вообще про другое чем остальные 2
По памяти их можно сравнить отчасти но только encoding/json
и jsoniter
Чтобы их более менее адекватно сравнить - я хотел вычитать относительно большой файл
(коллекция из 10000 структур небольшого размера) гарантировано до конца всеми средствами.
encoding/json
и jsoniter
при этом собирали срез структур заданного типа, а jsonparser
собирал
значение одного из полей в самом последнем элементе массива.
Результаты испытаний:
Инструмент |
ns/op |
B/op |
allocs/op |
encoding/json |
21968518 |
1489833 |
20039 |
jsoniter |
7557344 |
2492181 |
70025 |
jsonparser |
2060852 |
0 |
0 |
Как видно из этого анализа:
jsoniter
работает в 3 раза быстрее чем штатный енкодер, но при этом и удельное потребление памяти у него
в 3 раза интенсивнее
jsonparser
реально очень быстрый на сканирование json и не потребляет памяти в heap совсем
Выводы.
-
В общем и целом нет оснований не использовать jsoniter
для загрузки JSON в структуры если нет идиосинкразии
к внешним не стандартным зависимостям
-
В случае если действительно требуется не полный парс большого документа а работа с отдельными значениями
в JSON однозначно надо использовать jsonparser
- инструмент под это более чем заточен