насколько я помню, это экспериментальная версия, по крайней мере в 1.26.3 поэтому в репозитории она не присутствует. Но специально для ответа я провел тесты и получил
=== SilentJSON vs encoding/json v1 vs encoding/json/v2 (Go 1.26.3) ===
Вы абсолютно правы, тут всегда вопрос выбора инструмента под задачу.
Я пришел к этому решению через боль: когда нужно было каждый час парсить сотню прайсов от поставщиков (до 6 млн позиций на файл) для крупного портала, вопрос скорости парсинга стал критическим. Было обидно осознавать, что «бутылочное горлышко» — это не сложная бизнес-логика или нехватка мощностей, а именно сам парсер, который просто не успевал переваривать валидные данные. Причем ситуация усугублялась тем, что форматы у поставщиков были абсолютно разные и постоянно менялись.
Если бы такой инструмент был под рукой тогда, я бы сэкономил массу времени и нервов. В общем, как вы и сказали — «ружье» выстрелило именно там, где это было нужно для выживания проекта
насколько я помню, это экспериментальная версия, по крайней мере в 1.26.3
поэтому в репозитории она не присутствует. Но специально для ответа я провел тесты и получил
SilentJSON-32 1 753595900 ns/op 671.42 MB/s 65368888 B/op 6 allocs/opStdJSON_v2-32 1 2698572700 ns/op 187.50 MB/s 1985055064 B/op 18910718 allocs/opStdJSON_v1-32 1 3108066300 ns/op 162.80 MB/s 1985062216 B/op 18910832 allocs/op— Unmarshal 100K records (parallel) —
SilentJSON_Parallel-32 3 4823467 ns/op 3293.48 MB/s 6021384 B/op 163 allocs/opStdJSON_v1-32 3 80785100 ns/op 196.65 MB/s 2163085 B/op 220401 allocs/opStdJSON_v2-32 3 82894933 ns/op 191.64 MB/s 19606984 B/op 820401 allocs/op— Marshal 100K records —
SilentJSON-32 3 11557700 ns/op 1409.30 MB/s 0 B/op 0 allocs/opStdJSON_v2-32 3 40116033 ns/op 396.00 MB/s 15892528 B/op 3 allocs/opStdJSON_v1-32 3 41471367 ns/op 383.06 MB/s 15892528 B/op 3 allocs/op— Stream Decode 3M records (482 MB JSON) —
SilentJSON_Stream-32 1 836256500 ns/op 605.05 MB/s 41405248 B/op 7714289 allocs/opStdJSON_v2_Stream-32 1 2917844500 ns/op 173.41 MB/s 1985114304 B/op 18910791 allocs/opStdJSON_v1_Stream-32 1 3703443800 ns/op 136.62 MB/s 106551440 B/op 5118604 allocs/opВы абсолютно правы, тут всегда вопрос выбора инструмента под задачу.
Я пришел к этому решению через боль: когда нужно было каждый час парсить сотню прайсов от поставщиков (до 6 млн позиций на файл) для крупного портала, вопрос скорости парсинга стал критическим. Было обидно осознавать, что «бутылочное горлышко» — это не сложная бизнес-логика или нехватка мощностей, а именно сам парсер, который просто не успевал переваривать валидные данные. Причем ситуация усугублялась тем, что форматы у поставщиков были абсолютно разные и постоянно менялись.
Если бы такой инструмент был под рукой тогда, я бы сэкономил массу времени и нервов. В общем, как вы и сказали — «ружье» выстрелило именно там, где это было нужно для выживания проекта