Дэниел Лемир опубликовал исследовательский разбор нового JSON API Go. В нём сопоставлены новый и прежний механизмы кодирования и декодирования JSON.
В Go 1.27 пакет encoding/json/v2 доступен по умолчанию в стандартной библиотеке. Новый API не заменяет прежний напрямую из-за различий в проверке Unicode и чувствительности к регистру.
При декодировании в any encoding/json/v2 оказался в 1,5–2,3 раза быстрее исходной реализации. При кодировании в any новый API оказался в 1,2–3 раза быстрее.
Для типизированных структур новый API ускорял декодирование. При кодировании таких структур прежний API со старым движком был быстрее, а новый API был примерно в 1,5 раза медленнее.
Проверка утверждений:
- Дэниел Лемир опубликовал исследовательский разбор производительности нового JSON API Go; в нём сопоставляются новый и прежний механизмы кодирования и декодирования JSON. (подтверждено самой публикацией: доказательство; «The new Go JSON API: twice as fast, or 1.5x slower?»)
- В Go 1.27 пакет encoding/json/v2 доступен по умолчанию в стандартной библиотеке. (подтверждено самой публикацией: доказательство; «Go 1.27 makes a new JSON package ( encoding/json/v2 ) available by default in its standard library.»)
- Новый API не является прямой заменой прежнему, поскольку они различаются, в частности, проверкой Unicode и чувствительностью к регистру. (подтверждено самой публикацией: доказательство; «The two are not directly comparable as they differ with respect to Unicode validation, case sensitivity, etc. So it is not a drop-in replacement.»)
- Автор измерял скорость на Apple M4 Max и Intel Xeon Gold 6548N в Go 1.27.0, на одном ядре, и приводил медиану восьми запусков. (подтверждено самой публикацией: доказательство; «I ran this on an Apple M4 Max and on an Intel Xeon Gold 6548N (Emerald Rapids) using Go 1.27.0, on a single core ( GOMAXPROCS=1 ), reporting the median of eight runs.»)
- В тестах с декодированием в any encoding/json/v2 был в 1,5–2,3 раза быстрее исходной реализации при unmarshal и в 1,2–3 раза быстрее при marshal. (подтверждено самой публикацией: доказательство; «Compared to the original implementation, encoding/json/v2 unmarshals 1.5x to 2.3x faster and marshals 1.2x to 3x faster.»)
- Для типизированных структур новый API в замерах автора ускорял unmarshal, но прежний API со старым движком был быстрее при marshal. (подтверждено самой публикацией: доказательство; «I still get faster unmarshalling with the new API, but the legacy API with the legacy engine is faster when marshalling.»)
- Автор заключает, что при работе с типизированными структурами marshal нового API в его тестах примерно в 1,5 раза медленнее. (подтверждено самой публикацией: доказательство; «So unmarshalling gets faster across the board with encoding/json/v2 , and marshalling gets faster for any , but it is about 1.5x slower for typed structs in my tests.»)
Первоисточники:
оценка 64.9 · тип research · ревизия 1 · истории st-1yp1xc7