Деніел Лемір опублікував дослідницький огляд нового 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