yyjson
May 30, 2026 · View on GitHub
yyjson for Go, transpiled to pure Go (CGo-free). Covers parse, inspect, mutate, write, and JSON Pointer/Patch.
The module path is go.dw1.io/yyjson, get it with:
go get go.dw1.io/yyjson
Status
Caution
yyjson is pre-v1 and does NOT provide a stable API; use at your own risk.
The transpiled yyjson package currently targets:
linux/amd64linux/arm64
Unsupported platforms fail at build time. See LIMITATIONS.md for the current platform and tooling constraints.
Reading JSON
package main
import (
"fmt"
"go.dw1.io/yyjson"
)
func main() {
doc, err := yyjson.ReadString(`{"name":"yyjson","items":[1,2]}`)
if err != nil {
panic(err)
}
defer doc.Close()
root := doc.Root()
fmt.Println(root.Get("name").String())
fmt.Println(root.Get("items").Index(1).Uint())
}
Documents own their values. Close a Doc
when you are done with it; values derived from a closed document become invalid
and return zero values or nil.
Read-only operations on immutable documents and values may run concurrently while the owning document remains open.
Warning
Close must NOT race with
any other operation.
Writing JSON
doc, err := yyjson.NewMutDoc()
if err != nil {
panic(err)
}
defer doc.Close()
root := doc.Object()
root.AddKey("name", doc.String("yyjson"))
root.AddKey("ok", doc.Bool(true))
doc.SetRoot(root)
out, err := doc.WriteString()
if err != nil {
panic(err)
}
fmt.Println(out)
Mutable values belong to the MutDoc
that created them. Operations reject values from a different mutable document.
Warning
Mutable documents, mutable values, and incremental readers are NOT safe for concurrent use.
JSON Pointer & Patch
doc, err := yyjson.ReadString(`{"items":[{"name":"first"},{"name":"second"}]}`)
if err != nil {
panic(err)
}
defer doc.Close()
name, err := doc.Pointer("/items/1/name")
if err != nil {
panic(err)
}
fmt.Println(name.String())
MutDoc also supports JSON Pointer
mutation plus JSON Patch and JSON Merge Patch through
PointerSet,
PointerAdd,
PointerReplace,
PointerRemove,
Patch,
and MergePatch.
Read & Write Flags
Read flags are passed as variadic options:
doc, err := yyjson.ReadString(
`{key:'value', nums:[0x10, Infinity]}`,
yyjson.ReadJSON5,
)
Write flags work the same way:
out, err := doc.WriteString(
yyjson.WritePrettyTwoSpaces,
yyjson.WriteEscapeUnicode,
yyjson.WriteNewlineAtEnd,
)
See Type and Subtype for the complete flag list.
Incremental Reading
NewIncrReader wraps
yyjson's stateful incremental reader. It requires a maximum input size up front,
accepts appended chunks, and closes itself after a completed document or a
non-recoverable parse error.
reader, err := yyjson.NewIncrReader(len(`{"ok":true}`))
if err != nil {
panic(err)
}
defer reader.Close()
_ = reader.Append([]byte(`{"ok":true`))
_, _ = reader.Read() // returns ReadErrorMore
_ = reader.Append([]byte(`}`))
doc, err := reader.Read()
if err != nil {
panic(err)
}
defer doc.Close()
Compatibility Helpers
The package aliases common encoding/json types:
It also exposes Marshal,
Unmarshal,
Valid,
NewEncoder, and
NewDecoder. These functions
currently delegate to encoding/json.
Benchmarks
These benchmarks cover the document API: Read,
ReadAll, and
Doc.Write. The compatibility helpers
are not included.
vs. std (encoding/json)
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ std │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 7.737m ± 1% 3.192m ± 0% -58.74% (p=0.000 n=10)
Read/1MiB-4 16.347m ± 1% 6.539m ± 0% -60.00% (p=0.000 n=10)
Read/4MiB-4 69.87m ± 1% 19.45m ± 0% -72.16% (p=0.000 n=10)
Read/16MiB-4 294.44m ± 1% 67.87m ± 0% -76.95% (p=0.000 n=10)
ReadAll/500KiB-4 8.180m ± 0% 3.340m ± 0% -59.16% (p=0.000 n=10)
ReadAll/1MiB-4 17.587m ± 1% 6.868m ± 0% -60.95% (p=0.000 n=10)
ReadAll/4MiB-4 76.47m ± 1% 21.13m ± 1% -72.36% (p=0.000 n=10)
ReadAll/16MiB-4 326.34m ± 4% 72.40m ± 3% -77.81% (p=0.000 n=10)
Write/500KiB-4 7.403m ± 0% 1.835m ± 0% -75.21% (p=0.000 n=10)
Write/1MiB-4 15.138m ± 1% 3.701m ± 0% -75.55% (p=0.000 n=10)
Write/4MiB-4 60.33m ± 1% 12.70m ± 0% -78.95% (p=0.000 n=10)
Write/16MiB-4 238.63m ± 1% 48.78m ± 0% -79.56% (p=0.000 n=10)
RoundTrip/500KiB-4 16.258m ± 1% 5.029m ± 0% -69.07% (p=0.000 n=10)
RoundTrip/1MiB-4 33.36m ± 1% 10.20m ± 0% -69.43% (p=0.000 n=10)
RoundTrip/4MiB-4 133.73m ± 1% 32.23m ± 1% -75.90% (p=0.000 n=10)
RoundTrip/16MiB-4 534.8m ± 3% 118.2m ± 1% -77.89% (p=0.000 n=10)
DOMRead/500KiB-4 8.669m ± 1% 3.288m ± 0% -62.07% (p=0.000 n=10)
DOMRead/1MiB-4 17.986m ± 1% 6.642m ± 0% -63.07% (p=0.000 n=10)
DOMRead/4MiB-4 72.42m ± 2% 19.53m ± 0% -73.04% (p=0.000 n=10)
DOMRead/16MiB-4 289.08m ± 2% 67.99m ± 0% -76.48% (p=0.000 n=10)
DOMWrite/500KiB-4 7.339m ± 0% 1.807m ± 0% -75.37% (p=0.000 n=10)
DOMWrite/1MiB-4 15.052m ± 1% 3.661m ± 0% -75.68% (p=0.000 n=10)
DOMWrite/4MiB-4 59.96m ± 1% 12.65m ± 0% -78.91% (p=0.000 n=10)
DOMWrite/16MiB-4 236.68m ± 1% 48.89m ± 0% -79.34% (p=0.000 n=10)
geomean 44.14m 12.09m -72.62%
│ std │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 63.11Mi ± 1% 152.96Mi ± 0% +142.36% (p=0.000 n=10)
Read/1MiB-4 61.17Mi ± 1% 152.93Mi ± 0% +150.00% (p=0.000 n=10)
Read/4MiB-4 57.25Mi ± 1% 205.63Mi ± 0% +259.19% (p=0.000 n=10)
Read/16MiB-4 54.34Mi ± 1% 235.76Mi ± 0% +333.85% (p=0.000 n=10)
ReadAll/500KiB-4 59.70Mi ± 0% 146.18Mi ± 0% +144.88% (p=0.000 n=10)
ReadAll/1MiB-4 56.86Mi ± 1% 145.59Mi ± 0% +156.04% (p=0.000 n=10)
ReadAll/4MiB-4 52.31Mi ± 1% 189.28Mi ± 1% +261.84% (p=0.000 n=10)
ReadAll/16MiB-4 49.03Mi ± 4% 220.99Mi ± 3% +350.73% (p=0.000 n=10)
Write/500KiB-4 65.96Mi ± 0% 266.04Mi ± 0% +303.35% (p=0.000 n=10)
Write/1MiB-4 66.06Mi ± 1% 270.20Mi ± 0% +309.04% (p=0.000 n=10)
Write/4MiB-4 66.30Mi ± 1% 315.03Mi ± 0% +375.17% (p=0.000 n=10)
Write/16MiB-4 67.05Mi ± 1% 328.03Mi ± 0% +389.24% (p=0.000 n=10)
RoundTrip/500KiB-4 30.03Mi ± 1% 97.09Mi ± 0% +223.29% (p=0.000 n=10)
RoundTrip/1MiB-4 29.98Mi ± 1% 98.06Mi ± 0% +227.09% (p=0.000 n=10)
RoundTrip/4MiB-4 29.91Mi ± 1% 124.10Mi ± 1% +314.89% (p=0.000 n=10)
RoundTrip/16MiB-4 29.91Mi ± 3% 135.32Mi ± 1% +352.40% (p=0.000 n=10)
DOMRead/500KiB-4 56.32Mi ± 1% 148.50Mi ± 0% +163.65% (p=0.000 n=10)
DOMRead/1MiB-4 55.59Mi ± 1% 150.55Mi ± 0% +170.80% (p=0.000 n=10)
DOMRead/4MiB-4 55.24Mi ± 2% 204.85Mi ± 0% +270.82% (p=0.000 n=10)
DOMRead/16MiB-4 55.35Mi ± 2% 235.34Mi ± 0% +325.18% (p=0.000 n=10)
DOMWrite/500KiB-4 66.54Mi ± 0% 270.16Mi ± 0% +306.03% (p=0.000 n=10)
DOMWrite/1MiB-4 66.44Mi ± 1% 273.13Mi ± 0% +311.10% (p=0.000 n=10)
DOMWrite/4MiB-4 66.71Mi ± 1% 316.31Mi ± 0% +374.13% (p=0.000 n=10)
DOMWrite/16MiB-4 67.60Mi ± 1% 327.24Mi ± 0% +384.07% (p=0.000 n=10)
geomean 53.57Mi 195.6Mi +265.21%
│ std │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 3534856.0 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 7397432.0 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 29792596.5 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 118214239.5 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 4.369Mi ± 0% 1.008Mi ± 0% -76.92% (p=0.000 n=10)
ReadAll/1MiB-4 11.053Mi ± 0% 2.126Mi ± 0% -80.77% (p=0.000 n=10)
ReadAll/4MiB-4 44.411Mi ± 0% 9.532Mi ± 0% -78.54% (p=0.000 n=10)
ReadAll/16MiB-4 176.74Mi ± 0% 34.55Mi ± 0% -80.45% (p=0.000 n=10)
Write/500KiB-4 2230.7Ki ± 0% 504.5Ki ± 0% -77.39% (p=0.000 n=10)
Write/1MiB-4 4.443Mi ± 0% 1.000Mi ± 0% -77.48% (p=0.000 n=10)
Write/4MiB-4 17.550Mi ± 0% 4.000Mi ± 0% -77.21% (p=0.000 n=10)
Write/16MiB-4 70.32Mi ± 0% 16.00Mi ± 0% -77.25% (p=0.000 n=10)
RoundTrip/500KiB-4 5745.1Ki ± 0% 505.0Ki ± 0% -91.21% (p=0.000 n=10)
RoundTrip/1MiB-4 11.710Mi ± 0% 1.001Mi ± 0% -91.45% (p=0.000 n=10)
RoundTrip/4MiB-4 48.942Mi ± 1% 4.001Mi ± 0% -91.82% (p=0.000 n=10)
RoundTrip/16MiB-4 200.98Mi ± 3% 16.00Mi ± 0% -92.04% (p=0.000 n=10)
DOMRead/500KiB-4 3452.007Ki ± 0% 2.398Ki ± 0% -99.93% (p=0.000 n=10)
DOMRead/1MiB-4 7224.054Ki ± 0% 2.398Ki ± 0% -99.97% (p=0.000 n=10)
DOMRead/4MiB-4 29094.326Ki ± 0% 2.398Ki ± 0% -99.99% (p=0.000 n=10)
DOMRead/16MiB-4 115443.588Ki ± 0% 2.398Ki ± 0% -100.00% (p=0.000 n=10)
DOMWrite/500KiB-4 2230.7Ki ± 0% 504.5Ki ± 0% -77.39% (p=0.000 n=10)
DOMWrite/1MiB-4 4.443Mi ± 0% 1.000Mi ± 0% -77.48% (p=0.000 n=10)
DOMWrite/4MiB-4 17.550Mi ± 0% 4.000Mi ± 0% -77.21% (p=0.000 n=10)
DOMWrite/16MiB-4 70.32Mi ± 2% 16.00Mi ± 0% -77.25% (p=0.000 n=10)
geomean 16.64Mi 228.6Ki -98.66%
│ std │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 115223.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/1MiB-4 235106.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/4MiB-4 921176.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 3627302.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 115237.00 ± 0% 33.00 ± 0% -99.97% (p=0.000 n=10)
ReadAll/1MiB-4 235122.00 ± 0% 35.00 ± 0% -99.99% (p=0.000 n=10)
ReadAll/4MiB-4 921194.00 ± 0% 39.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/16MiB-4 3627322.00 ± 0% 42.00 ± 0% -100.00% (p=0.000 n=10)
Write/500KiB-4 52814.000 ± 0% 7.000 ± 0% -99.99% (p=0.000 n=10)
Write/1MiB-4 107759.000 ± 0% 7.000 ± 0% -99.99% (p=0.000 n=10)
Write/4MiB-4 422205.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
Write/16MiB-4 1662512.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/500KiB-4 168038.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/1MiB-4 342868.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/4MiB-4 1343393.50 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/16MiB-4 5289837.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/500KiB-4 115223.00 ± 0% 29.00 ± 0% -99.97% (p=0.000 n=10)
DOMRead/1MiB-4 235106.00 ± 0% 29.00 ± 0% -99.99% (p=0.000 n=10)
DOMRead/4MiB-4 921176.00 ± 0% 29.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/16MiB-4 3627302.00 ± 0% 29.00 ± 0% -100.00% (p=0.000 n=10)
DOMWrite/500KiB-4 52814.000 ± 0% 7.000 ± 0% -99.99% (p=0.000 n=10)
DOMWrite/1MiB-4 107759.000 ± 0% 7.000 ± 0% -99.99% (p=0.000 n=10)
DOMWrite/4MiB-4 422205.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
DOMWrite/16MiB-4 1662512.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
geomean 450.4k 14.11 -100.00%
vs. json-iterator
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ json-iterator │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 7.015m ± 0% 3.192m ± 0% -54.49% (p=0.000 n=10)
Read/1MiB-4 14.941m ± 0% 6.539m ± 0% -56.24% (p=0.000 n=10)
Read/4MiB-4 66.71m ± 1% 19.45m ± 0% -70.84% (p=0.000 n=10)
Read/16MiB-4 283.64m ± 2% 67.87m ± 0% -76.07% (p=0.000 n=10)
ReadAll/500KiB-4 7.308m ± 0% 3.340m ± 0% -54.29% (p=0.000 n=10)
ReadAll/1MiB-4 15.532m ± 1% 6.868m ± 0% -55.78% (p=0.000 n=10)
ReadAll/4MiB-4 69.10m ± 2% 21.13m ± 1% -69.42% (p=0.000 n=10)
ReadAll/16MiB-4 294.14m ± 2% 72.40m ± 3% -75.38% (p=0.000 n=10)
Write/500KiB-4 4.178m ± 2% 1.835m ± 0% -56.07% (p=0.000 n=10)
Write/1MiB-4 8.577m ± 2% 3.701m ± 0% -56.85% (p=0.000 n=10)
Write/4MiB-4 35.63m ± 2% 12.70m ± 0% -64.36% (p=0.000 n=10)
Write/16MiB-4 141.71m ± 2% 48.78m ± 0% -65.58% (p=0.000 n=10)
RoundTrip/500KiB-4 12.986m ± 1% 5.029m ± 0% -61.27% (p=0.000 n=10)
RoundTrip/1MiB-4 27.12m ± 2% 10.20m ± 0% -62.40% (p=0.000 n=10)
RoundTrip/4MiB-4 110.13m ± 1% 32.23m ± 1% -70.73% (p=0.000 n=10)
RoundTrip/16MiB-4 463.3m ± 2% 118.2m ± 1% -74.48% (p=0.000 n=10)
DOMRead/500KiB-4 3.288m ± 0%
DOMRead/1MiB-4 6.642m ± 0%
DOMRead/4MiB-4 19.53m ± 0%
DOMRead/16MiB-4 67.99m ± 0%
DOMWrite/500KiB-4 1.807m ± 0%
DOMWrite/1MiB-4 3.661m ± 0%
DOMWrite/4MiB-4 12.65m ± 0%
DOMWrite/16MiB-4 48.89m ± 0%
geomean 37.44m 12.09m -64.88%
│ json-iterator │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 69.61Mi ± 0% 152.96Mi ± 0% +119.74% (p=0.000 n=10)
Read/1MiB-4 66.93Mi ± 0% 152.93Mi ± 0% +128.50% (p=0.000 n=10)
Read/4MiB-4 59.96Mi ± 1% 205.63Mi ± 0% +242.93% (p=0.000 n=10)
Read/16MiB-4 56.41Mi ± 2% 235.76Mi ± 0% +317.94% (p=0.000 n=10)
ReadAll/500KiB-4 66.81Mi ± 0% 146.18Mi ± 0% +118.80% (p=0.000 n=10)
ReadAll/1MiB-4 64.38Mi ± 1% 145.59Mi ± 0% +126.14% (p=0.000 n=10)
ReadAll/4MiB-4 57.89Mi ± 2% 189.28Mi ± 1% +226.94% (p=0.000 n=10)
ReadAll/16MiB-4 54.40Mi ± 2% 220.99Mi ± 3% +306.21% (p=0.000 n=10)
Write/500KiB-4 116.9Mi ± 1% 266.0Mi ± 0% +127.64% (p=0.000 n=10)
Write/1MiB-4 116.6Mi ± 2% 270.2Mi ± 0% +131.75% (p=0.000 n=10)
Write/4MiB-4 112.3Mi ± 2% 315.0Mi ± 0% +180.60% (p=0.000 n=10)
Write/16MiB-4 112.9Mi ± 2% 328.0Mi ± 0% +190.52% (p=0.000 n=10)
RoundTrip/500KiB-4 37.60Mi ± 1% 97.09Mi ± 0% +158.19% (p=0.000 n=10)
RoundTrip/1MiB-4 36.87Mi ± 2% 98.06Mi ± 0% +165.96% (p=0.000 n=10)
RoundTrip/4MiB-4 36.32Mi ± 1% 124.10Mi ± 1% +241.68% (p=0.000 n=10)
RoundTrip/16MiB-4 34.54Mi ± 2% 135.32Mi ± 1% +291.81% (p=0.000 n=10)
DOMRead/500KiB-4 148.5Mi ± 0%
DOMRead/1MiB-4 150.6Mi ± 0%
DOMRead/4MiB-4 204.8Mi ± 0%
DOMRead/16MiB-4 235.3Mi ± 0%
DOMWrite/500KiB-4 270.2Mi ± 0%
DOMWrite/1MiB-4 273.1Mi ± 0%
DOMWrite/4MiB-4 316.3Mi ± 0%
DOMWrite/16MiB-4 327.2Mi ± 0%
geomean 63.16Mi 195.6Mi +184.76%
│ json-iterator │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 4311046.0 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 8972893.0 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 35942018.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 142404500.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 4.113Mi ± 0% 1.008Mi ± 0% -75.48% (p=0.000 n=10)
ReadAll/1MiB-4 8.561Mi ± 0% 2.126Mi ± 0% -75.17% (p=0.000 n=10)
ReadAll/4MiB-4 34.291Mi ± 0% 9.532Mi ± 0% -72.20% (p=0.000 n=10)
ReadAll/16MiB-4 135.86Mi ± 0% 34.55Mi ± 0% -74.57% (p=0.000 n=10)
Write/500KiB-4 1555.9Ki ± 0% 504.5Ki ± 0% -67.58% (p=0.000 n=10)
Write/1MiB-4 3.100Mi ± 0% 1.000Mi ± 0% -67.72% (p=0.000 n=10)
Write/4MiB-4 12.319Mi ± 1% 4.000Mi ± 0% -67.53% (p=0.000 n=10)
Write/16MiB-4 50.68Mi ± 5% 16.00Mi ± 0% -68.43% (p=0.000 n=10)
RoundTrip/500KiB-4 5964.5Ki ± 0% 505.0Ki ± 0% -91.53% (p=0.000 n=10)
RoundTrip/1MiB-4 12.438Mi ± 1% 1.001Mi ± 0% -91.95% (p=0.000 n=10)
RoundTrip/4MiB-4 56.607Mi ± 3% 4.001Mi ± 0% -92.93% (p=0.000 n=10)
RoundTrip/16MiB-4 254.68Mi ± 5% 16.00Mi ± 0% -93.72% (p=0.000 n=10)
DOMRead/500KiB-4 2.398Ki ± 0%
DOMRead/1MiB-4 2.398Ki ± 0%
DOMRead/4MiB-4 2.398Ki ± 0%
DOMRead/16MiB-4 2.398Ki ± 0%
DOMWrite/500KiB-4 504.5Ki ± 0%
DOMWrite/1MiB-4 1.000Mi ± 0%
DOMWrite/4MiB-4 4.000Mi ± 0%
DOMWrite/16MiB-4 16.00Mi ± 0%
geomean 17.57Mi 228.6Ki -97.80%
│ json-iterator │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 158436.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/1MiB-4 323274.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/4MiB-4 1266619.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 4987540.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 158526.00 ± 0% 33.00 ± 0% -99.98% (p=0.000 n=10)
ReadAll/1MiB-4 323465.00 ± 0% 35.00 ± 0% -99.99% (p=0.000 n=10)
ReadAll/4MiB-4 1267487.00 ± 0% 39.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/16MiB-4 4991275.00 ± 0% 42.00 ± 0% -100.00% (p=0.000 n=10)
Write/500KiB-4 19205.000 ± 0% 7.000 ± 0% -99.96% (p=0.000 n=10)
Write/1MiB-4 39185.000 ± 0% 7.000 ± 0% -99.98% (p=0.000 n=10)
Write/4MiB-4 153529.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
Write/16MiB-4 604550.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/500KiB-4 177643.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/1MiB-4 362464.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/4MiB-4 1420166.50 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/16MiB-4 5592123.50 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/500KiB-4 29.00 ± 0%
DOMRead/1MiB-4 29.00 ± 0%
DOMRead/4MiB-4 29.00 ± 0%
DOMRead/16MiB-4 29.00 ± 0%
DOMWrite/500KiB-4 7.000 ± 0%
DOMWrite/1MiB-4 7.000 ± 0%
DOMWrite/4MiB-4 7.000 ± 0%
DOMWrite/16MiB-4 7.000 ± 0%
geomean 458.0k 14.11 -100.00%
vs. segmentio/encoding/json
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ segmentio-json │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 7.042m ± 0% 3.192m ± 0% -54.67% (p=0.000 n=10)
Read/1MiB-4 14.802m ± 0% 6.539m ± 0% -55.82% (p=0.000 n=10)
Read/4MiB-4 63.03m ± 1% 19.45m ± 0% -69.14% (p=0.000 n=10)
Read/16MiB-4 265.82m ± 1% 67.87m ± 0% -74.47% (p=0.000 n=10)
ReadAll/500KiB-4 8.533m ± 0% 3.340m ± 0% -60.85% (p=0.000 n=10)
ReadAll/1MiB-4 18.032m ± 1% 6.868m ± 0% -61.91% (p=0.000 n=10)
ReadAll/4MiB-4 76.72m ± 1% 21.13m ± 1% -72.45% (p=0.000 n=10)
ReadAll/16MiB-4 319.62m ± 1% 72.40m ± 3% -77.35% (p=0.000 n=10)
Write/500KiB-4 3.002m ± 1% 1.835m ± 0% -38.85% (p=0.000 n=10)
Write/1MiB-4 6.093m ± 1% 3.701m ± 0% -39.26% (p=0.000 n=10)
Write/4MiB-4 24.78m ± 1% 12.70m ± 0% -48.76% (p=0.000 n=10)
Write/16MiB-4 100.20m ± 1% 48.78m ± 0% -51.32% (p=0.000 n=10)
RoundTrip/500KiB-4 11.255m ± 1% 5.029m ± 0% -55.31% (p=0.000 n=10)
RoundTrip/1MiB-4 23.23m ± 1% 10.20m ± 0% -56.10% (p=0.000 n=10)
RoundTrip/4MiB-4 93.70m ± 2% 32.23m ± 1% -65.60% (p=0.000 n=10)
RoundTrip/16MiB-4 389.0m ± 1% 118.2m ± 1% -69.60% (p=0.000 n=10)
DOMRead/500KiB-4 3.288m ± 0%
DOMRead/1MiB-4 6.642m ± 0%
DOMRead/4MiB-4 19.53m ± 0%
DOMRead/16MiB-4 67.99m ± 0%
DOMWrite/500KiB-4 1.807m ± 0%
DOMWrite/1MiB-4 3.661m ± 0%
DOMWrite/4MiB-4 12.65m ± 0%
DOMWrite/16MiB-4 48.89m ± 0%
geomean 33.76m 12.09m -61.06%
│ segmentio-json │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 69.33Mi ± 0% 152.96Mi ± 0% +120.61% (p=0.000 n=10)
Read/1MiB-4 67.56Mi ± 0% 152.93Mi ± 0% +126.37% (p=0.000 n=10)
Read/4MiB-4 63.46Mi ± 1% 205.63Mi ± 0% +224.05% (p=0.000 n=10)
Read/16MiB-4 60.19Mi ± 1% 235.76Mi ± 0% +291.68% (p=0.000 n=10)
ReadAll/500KiB-4 57.23Mi ± 0% 146.18Mi ± 0% +155.45% (p=0.000 n=10)
ReadAll/1MiB-4 55.46Mi ± 1% 145.59Mi ± 0% +162.54% (p=0.000 n=10)
ReadAll/4MiB-4 52.14Mi ± 1% 189.28Mi ± 1% +263.00% (p=0.000 n=10)
ReadAll/16MiB-4 50.06Mi ± 1% 220.99Mi ± 3% +341.46% (p=0.000 n=10)
Write/500KiB-4 162.7Mi ± 1% 266.0Mi ± 0% +63.54% (p=0.000 n=10)
Write/1MiB-4 164.1Mi ± 1% 270.2Mi ± 0% +64.63% (p=0.000 n=10)
Write/4MiB-4 161.4Mi ± 1% 315.0Mi ± 0% +95.16% (p=0.000 n=10)
Write/16MiB-4 159.7Mi ± 1% 328.0Mi ± 0% +105.44% (p=0.000 n=10)
RoundTrip/500KiB-4 43.39Mi ± 1% 97.09Mi ± 0% +123.77% (p=0.000 n=10)
RoundTrip/1MiB-4 43.04Mi ± 1% 98.06Mi ± 0% +127.81% (p=0.000 n=10)
RoundTrip/4MiB-4 42.69Mi ± 2% 124.10Mi ± 1% +190.70% (p=0.000 n=10)
RoundTrip/16MiB-4 41.13Mi ± 1% 135.32Mi ± 1% +228.99% (p=0.000 n=10)
DOMRead/500KiB-4 148.5Mi ± 0%
DOMRead/1MiB-4 150.6Mi ± 0%
DOMRead/4MiB-4 204.8Mi ± 0%
DOMRead/16MiB-4 235.3Mi ± 0%
DOMWrite/500KiB-4 270.2Mi ± 0%
DOMWrite/1MiB-4 273.1Mi ± 0%
DOMWrite/4MiB-4 316.3Mi ± 0%
DOMWrite/16MiB-4 327.2Mi ± 0%
geomean 70.03Mi 195.6Mi +156.84%
│ segmentio-json │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 4160129.0 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 8479841.0 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 33246473.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 130990766.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 4.937Mi ± 0% 1.008Mi ± 0% -79.57% (p=0.000 n=10)
ReadAll/1MiB-4 10.057Mi ± 0% 2.126Mi ± 0% -78.86% (p=0.000 n=10)
ReadAll/4MiB-4 39.677Mi ± 0% 9.532Mi ± 0% -75.98% (p=0.000 n=10)
ReadAll/16MiB-4 156.89Mi ± 0% 34.55Mi ± 0% -77.98% (p=0.000 n=10)
Write/500KiB-4 505.2Ki ± 0% 504.5Ki ± 0% ~ (p=0.428 n=10)
Write/1MiB-4 1.005Mi ± 0% 1.000Mi ± 0% ~ (p=0.459 n=10)
Write/4MiB-4 4.041Mi ± 1% 4.000Mi ± 0% ~ (p=1.000 n=10)
Write/16MiB-4 17.69Mi ± 10% 16.00Mi ± 0% -9.54% (p=0.021 n=10)
RoundTrip/500KiB-4 4663.6Ki ± 0% 505.0Ki ± 0% -89.17% (p=0.000 n=10)
RoundTrip/1MiB-4 9.563Mi ± 1% 1.001Mi ± 0% -89.53% (p=0.000 n=10)
RoundTrip/4MiB-4 42.503Mi ± 5% 4.001Mi ± 0% -90.59% (p=0.000 n=10)
RoundTrip/16MiB-4 205.01Mi ± 5% 16.00Mi ± 0% -92.19% (p=0.000 n=10)
DOMRead/500KiB-4 2.398Ki ± 0%
DOMRead/1MiB-4 2.398Ki ± 0%
DOMRead/4MiB-4 2.398Ki ± 0%
DOMRead/16MiB-4 2.398Ki ± 0%
DOMWrite/500KiB-4 504.5Ki ± 0%
DOMWrite/1MiB-4 1.000Mi ± 0%
DOMWrite/4MiB-4 4.000Mi ± 0%
DOMWrite/16MiB-4 16.00Mi ± 0%
geomean 12.81Mi 228.6Ki -96.98%
│ segmentio-json │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 91226.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/1MiB-4 186132.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 729268.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 2871615.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 91245.00 ± 0% 33.00 ± 0% -99.96% (p=0.000 n=10)
ReadAll/1MiB-4 186156.00 ± 0% 35.00 ± 0% -99.98% (p=0.000 n=10)
ReadAll/4MiB-4 729301.00 ± 0% 39.00 ± 0% -99.99% (p=0.000 n=10)
ReadAll/16MiB-4 2871658.00 ± 0% 42.00 ± 0% -100.00% (p=0.000 n=10)
Write/500KiB-4 1.000 ± 0% 7.000 ± 0% +600.00% (p=0.000 n=10)
Write/1MiB-4 1.000 ± 0% 7.000 ± 0% +600.00% (p=0.000 n=10)
Write/4MiB-4 1.000 ± 0% 7.000 ± 0% +600.00% (p=0.000 n=10)
Write/16MiB-4 2.000 ± 50% 7.000 ± 0% +250.00% (p=0.000 n=10)
RoundTrip/500KiB-4 91228.00 ± 0% 15.00 ± 0% -99.98% (p=0.000 n=10)
RoundTrip/1MiB-4 186136.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/4MiB-4 729282.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/16MiB-4 2871646.50 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/500KiB-4 29.00 ± 0%
DOMRead/1MiB-4 29.00 ± 0%
DOMRead/4MiB-4 29.00 ± 0%
DOMRead/16MiB-4 29.00 ± 0%
DOMWrite/500KiB-4 7.000 ± 0%
DOMWrite/1MiB-4 7.000 ± 0%
DOMWrite/4MiB-4 7.000 ± 0%
DOMWrite/16MiB-4 7.000 ± 0%
geomean 17.67k 14.11 -99.92%
vs. go-json
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ go-json │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 7.234m ± 1% 3.192m ± 0% -55.87% (p=0.000 n=10)
Read/1MiB-4 15.856m ± 1% 6.539m ± 0% -58.76% (p=0.000 n=10)
Read/4MiB-4 69.72m ± 1% 19.45m ± 0% -72.10% (p=0.000 n=10)
Read/16MiB-4 290.93m ± 2% 67.87m ± 0% -76.67% (p=0.000 n=10)
ReadAll/500KiB-4 8.255m ± 1% 3.340m ± 0% -59.54% (p=0.000 n=10)
ReadAll/1MiB-4 18.088m ± 0% 6.868m ± 0% -62.03% (p=0.000 n=10)
ReadAll/4MiB-4 77.74m ± 1% 21.13m ± 1% -72.82% (p=0.000 n=10)
ReadAll/16MiB-4 314.38m ± 2% 72.40m ± 3% -76.97% (p=0.000 n=10)
Write/500KiB-4 5.024m ± 4% 1.835m ± 0% -63.46% (p=0.000 n=10)
Write/1MiB-4 10.290m ± 4% 3.701m ± 0% -64.03% (p=0.000 n=10)
Write/4MiB-4 41.42m ± 1% 12.70m ± 0% -69.34% (p=0.000 n=10)
Write/16MiB-4 172.03m ± 3% 48.78m ± 0% -71.65% (p=0.000 n=10)
RoundTrip/500KiB-4 13.569m ± 1% 5.029m ± 0% -62.94% (p=0.000 n=10)
RoundTrip/1MiB-4 28.65m ± 2% 10.20m ± 0% -64.41% (p=0.000 n=10)
RoundTrip/4MiB-4 122.06m ± 2% 32.23m ± 1% -73.59% (p=0.000 n=10)
RoundTrip/16MiB-4 553.2m ± 8% 118.2m ± 1% -78.62% (p=0.000 n=10)
DOMRead/500KiB-4 3.288m ± 0%
DOMRead/1MiB-4 6.642m ± 0%
DOMRead/4MiB-4 19.53m ± 0%
DOMRead/16MiB-4 67.99m ± 0%
DOMWrite/500KiB-4 1.807m ± 0%
DOMWrite/1MiB-4 3.661m ± 0%
DOMWrite/4MiB-4 12.65m ± 0%
DOMWrite/16MiB-4 48.89m ± 0%
geomean 41.65m 12.09m -68.44%
│ go-json │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 67.50Mi ± 1% 152.96Mi ± 0% +126.60% (p=0.000 n=10)
Read/1MiB-4 63.07Mi ± 1% 152.93Mi ± 0% +142.47% (p=0.000 n=10)
Read/4MiB-4 57.38Mi ± 1% 205.63Mi ± 0% +258.38% (p=0.000 n=10)
Read/16MiB-4 55.00Mi ± 2% 235.76Mi ± 0% +328.66% (p=0.000 n=10)
ReadAll/500KiB-4 59.15Mi ± 1% 146.18Mi ± 0% +147.15% (p=0.000 n=10)
ReadAll/1MiB-4 55.28Mi ± 0% 145.59Mi ± 0% +163.35% (p=0.000 n=10)
ReadAll/4MiB-4 51.45Mi ± 1% 189.28Mi ± 1% +267.88% (p=0.000 n=10)
ReadAll/16MiB-4 50.89Mi ± 2% 220.99Mi ± 3% +334.22% (p=0.000 n=10)
Write/500KiB-4 97.20Mi ± 4% 266.04Mi ± 0% +173.70% (p=0.000 n=10)
Write/1MiB-4 97.18Mi ± 4% 270.20Mi ± 0% +178.03% (p=0.000 n=10)
Write/4MiB-4 96.58Mi ± 1% 315.03Mi ± 0% +226.19% (p=0.000 n=10)
Write/16MiB-4 93.01Mi ± 3% 328.03Mi ± 0% +252.69% (p=0.000 n=10)
RoundTrip/500KiB-4 35.98Mi ± 1% 97.09Mi ± 0% +169.83% (p=0.000 n=10)
RoundTrip/1MiB-4 34.90Mi ± 2% 98.06Mi ± 0% +180.93% (p=0.000 n=10)
RoundTrip/4MiB-4 32.77Mi ± 2% 124.10Mi ± 1% +278.67% (p=0.000 n=10)
RoundTrip/16MiB-4 28.93Mi ± 8% 135.32Mi ± 1% +367.68% (p=0.000 n=10)
DOMRead/500KiB-4 148.5Mi ± 0%
DOMRead/1MiB-4 150.6Mi ± 0%
DOMRead/4MiB-4 204.8Mi ± 0%
DOMRead/16MiB-4 235.3Mi ± 0%
DOMWrite/500KiB-4 270.2Mi ± 0%
DOMWrite/1MiB-4 273.1Mi ± 0%
DOMWrite/4MiB-4 316.3Mi ± 0%
DOMWrite/16MiB-4 327.2Mi ± 0%
geomean 56.77Mi 195.6Mi +216.84%
│ go-json │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 4626236.5 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 9472684.0 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 37423575.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 147954270.5 ± 1% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 4.566Mi ± 0% 1.008Mi ± 0% -77.91% (p=0.000 n=10)
ReadAll/1MiB-4 10.337Mi ± 0% 2.126Mi ± 0% -79.44% (p=0.000 n=10)
ReadAll/4MiB-4 40.833Mi ± 0% 9.532Mi ± 0% -76.66% (p=0.000 n=10)
ReadAll/16MiB-4 161.41Mi ± 0% 34.55Mi ± 0% -78.60% (p=0.000 n=10)
Write/500KiB-4 959.7Ki ± 0% 504.5Ki ± 0% -47.43% (p=0.000 n=10)
Write/1MiB-4 1.920Mi ± 1% 1.000Mi ± 0% -47.89% (p=0.000 n=10)
Write/4MiB-4 7.845Mi ± 1% 4.000Mi ± 0% -49.01% (p=0.000 n=10)
Write/16MiB-4 36.46Mi ± 2% 16.00Mi ± 0% -56.12% (p=0.000 n=10)
RoundTrip/500KiB-4 5653.7Ki ± 1% 505.0Ki ± 0% -91.07% (p=0.000 n=10)
RoundTrip/1MiB-4 11.864Mi ± 2% 1.001Mi ± 0% -91.56% (p=0.000 n=10)
RoundTrip/4MiB-4 53.870Mi ± 7% 4.001Mi ± 0% -92.57% (p=0.000 n=10)
RoundTrip/16MiB-4 283.22Mi ± 15% 16.00Mi ± 0% -94.35% (p=0.000 n=10)
DOMRead/500KiB-4 2.398Ki ± 0%
DOMRead/1MiB-4 2.398Ki ± 0%
DOMRead/4MiB-4 2.398Ki ± 0%
DOMRead/16MiB-4 2.398Ki ± 0%
DOMWrite/500KiB-4 504.5Ki ± 0%
DOMWrite/1MiB-4 1.000Mi ± 0%
DOMWrite/4MiB-4 4.000Mi ± 0%
DOMWrite/16MiB-4 16.00Mi ± 0%
geomean 16.56Mi 228.6Ki -97.67%
│ go-json │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 139221.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/1MiB-4 284077.50 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/4MiB-4 1113076.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 4382973.50 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 153637.00 ± 0% 33.00 ± 0% -99.98% (p=0.000 n=10)
ReadAll/1MiB-4 313482.00 ± 0% 35.00 ± 0% -99.99% (p=0.000 n=10)
ReadAll/4MiB-4 1228239.00 ± 0% 39.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/16MiB-4 4836402.00 ± 0% 42.00 ± 0% -100.00% (p=0.000 n=10)
Write/500KiB-4 4803.000 ± 0% 7.000 ± 0% -99.85% (p=0.000 n=10)
Write/1MiB-4 9798.000 ± 0% 7.000 ± 0% -99.93% (p=0.000 n=10)
Write/4MiB-4 38385.000 ± 0% 7.000 ± 0% -99.98% (p=0.000 n=10)
Write/16MiB-4 151143.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/500KiB-4 144025.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/1MiB-4 293880.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/4MiB-4 1151480.50 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/16MiB-4 4534174.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/500KiB-4 29.00 ± 0%
DOMRead/1MiB-4 29.00 ± 0%
DOMRead/4MiB-4 29.00 ± 0%
DOMRead/16MiB-4 29.00 ± 0%
DOMWrite/500KiB-4 7.000 ± 0%
DOMWrite/1MiB-4 7.000 ± 0%
DOMWrite/4MiB-4 7.000 ± 0%
DOMWrite/16MiB-4 7.000 ± 0%
geomean 295.2k 14.11 -100.00%
vs. sonic
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ sonic │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 3.937m ± 1% 3.192m ± 0% -18.92% (p=0.000 n=10)
Read/1MiB-4 8.735m ± 1% 6.539m ± 0% -25.14% (p=0.000 n=10)
Read/4MiB-4 40.13m ± 1% 19.45m ± 0% -51.53% (p=0.000 n=10)
Read/16MiB-4 167.43m ± 1% 67.87m ± 0% -59.47% (p=0.000 n=10)
ReadAll/500KiB-4 4.030m ± 1% 3.340m ± 0% -17.11% (p=0.000 n=10)
ReadAll/1MiB-4 10.086m ± 1% 6.868m ± 0% -31.90% (p=0.000 n=10)
ReadAll/4MiB-4 46.26m ± 1% 21.13m ± 1% -54.31% (p=0.000 n=10)
ReadAll/16MiB-4 173.16m ± 2% 72.40m ± 3% -58.19% (p=0.000 n=10)
Write/500KiB-4 2.307m ± 1% 1.835m ± 0% -20.43% (p=0.000 n=10)
Write/1MiB-4 6.634m ± 1% 3.701m ± 0% -44.21% (p=0.000 n=10)
Write/4MiB-4 26.64m ± 1% 12.70m ± 0% -52.35% (p=0.000 n=10)
Write/16MiB-4 116.58m ± 1% 48.78m ± 0% -58.16% (p=0.000 n=10)
RoundTrip/500KiB-4 7.784m ± 1% 5.029m ± 0% -35.39% (p=0.000 n=10)
RoundTrip/1MiB-4 17.77m ± 1% 10.20m ± 0% -42.60% (p=0.000 n=10)
RoundTrip/4MiB-4 69.27m ± 1% 32.23m ± 1% -53.47% (p=0.000 n=10)
RoundTrip/16MiB-4 276.4m ± 2% 118.2m ± 1% -57.23% (p=0.000 n=10)
DOMRead/500KiB-4 3.288m ± 0%
DOMRead/1MiB-4 6.642m ± 0%
DOMRead/4MiB-4 19.53m ± 0%
DOMRead/16MiB-4 67.99m ± 0%
DOMWrite/500KiB-4 1.807m ± 0%
DOMWrite/1MiB-4 3.661m ± 0%
DOMWrite/4MiB-4 12.65m ± 0%
DOMWrite/16MiB-4 48.89m ± 0%
geomean 23.63m 12.09m -44.37%
│ sonic │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 124.0Mi ± 1% 153.0Mi ± 0% +23.33% (p=0.000 n=10)
Read/1MiB-4 114.5Mi ± 1% 152.9Mi ± 0% +33.58% (p=0.000 n=10)
Read/4MiB-4 99.67Mi ± 1% 205.63Mi ± 0% +106.32% (p=0.000 n=10)
Read/16MiB-4 95.56Mi ± 1% 235.76Mi ± 0% +146.70% (p=0.000 n=10)
ReadAll/500KiB-4 121.2Mi ± 1% 146.2Mi ± 0% +20.64% (p=0.000 n=10)
ReadAll/1MiB-4 99.15Mi ± 1% 145.59Mi ± 0% +46.84% (p=0.000 n=10)
ReadAll/4MiB-4 86.47Mi ± 1% 189.28Mi ± 1% +118.89% (p=0.000 n=10)
ReadAll/16MiB-4 92.40Mi ± 2% 220.99Mi ± 3% +139.17% (p=0.000 n=10)
Write/500KiB-4 211.7Mi ± 1% 266.0Mi ± 0% +25.67% (p=0.000 n=10)
Write/1MiB-4 150.7Mi ± 1% 270.2Mi ± 0% +79.25% (p=0.000 n=10)
Write/4MiB-4 150.1Mi ± 1% 315.0Mi ± 0% +109.84% (p=0.000 n=10)
Write/16MiB-4 137.2Mi ± 1% 328.0Mi ± 0% +139.01% (p=0.000 n=10)
RoundTrip/500KiB-4 62.73Mi ± 1% 97.09Mi ± 0% +54.77% (p=0.000 n=10)
RoundTrip/1MiB-4 56.29Mi ± 1% 98.06Mi ± 0% +74.21% (p=0.000 n=10)
RoundTrip/4MiB-4 57.74Mi ± 1% 124.10Mi ± 1% +114.91% (p=0.000 n=10)
RoundTrip/16MiB-4 57.88Mi ± 2% 135.32Mi ± 1% +133.80% (p=0.000 n=10)
DOMRead/500KiB-4 148.5Mi ± 0%
DOMRead/1MiB-4 150.6Mi ± 0%
DOMRead/4MiB-4 204.8Mi ± 0%
DOMRead/16MiB-4 235.3Mi ± 0%
DOMWrite/500KiB-4 270.2Mi ± 0%
DOMWrite/1MiB-4 273.1Mi ± 0%
DOMWrite/4MiB-4 316.3Mi ± 0%
DOMWrite/16MiB-4 327.2Mi ± 0%
geomean 100.0Mi 195.6Mi +79.77%
│ sonic │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 5314537.5 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 10880919.5 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 43157146.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 166956150.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 5.070Mi ± 0% 1.008Mi ± 0% -80.11% (p=0.000 n=10)
ReadAll/1MiB-4 13.828Mi ± 0% 2.126Mi ± 0% -84.63% (p=0.000 n=10)
ReadAll/4MiB-4 58.528Mi ± 0% 9.532Mi ± 0% -83.71% (p=0.000 n=10)
ReadAll/16MiB-4 217.75Mi ± 0% 34.55Mi ± 0% -84.13% (p=0.000 n=10)
Write/500KiB-4 955.0Ki ± 0% 504.5Ki ± 0% -47.18% (p=0.000 n=10)
Write/1MiB-4 5.888Mi ± 0% 1.000Mi ± 0% -83.01% (p=0.000 n=10)
Write/4MiB-4 23.638Mi ± 0% 4.000Mi ± 0% -83.08% (p=0.000 n=10)
Write/16MiB-4 111.71Mi ± 0% 16.00Mi ± 0% -85.68% (p=0.000 n=10)
RoundTrip/500KiB-4 6270.9Ki ± 0% 505.0Ki ± 0% -91.95% (p=0.000 n=10)
RoundTrip/1MiB-4 16.288Mi ± 0% 1.001Mi ± 0% -93.85% (p=0.000 n=10)
RoundTrip/4MiB-4 64.876Mi ± 0% 4.001Mi ± 0% -93.83% (p=0.000 n=10)
RoundTrip/16MiB-4 271.07Mi ± 0% 16.00Mi ± 0% -94.10% (p=0.000 n=10)
DOMRead/500KiB-4 2.398Ki ± 0%
DOMRead/1MiB-4 2.398Ki ± 0%
DOMRead/4MiB-4 2.398Ki ± 0%
DOMRead/16MiB-4 2.398Ki ± 0%
DOMWrite/500KiB-4 504.5Ki ± 0%
DOMWrite/1MiB-4 1.000Mi ± 0%
DOMWrite/4MiB-4 4.000Mi ± 0%
DOMWrite/16MiB-4 16.00Mi ± 0%
geomean 23.35Mi 228.6Ki -98.35%
│ sonic │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 52816.00 ± 0% 10.00 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 107762.00 ± 0% 10.00 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 422211.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 1662517.00 ± 0% 10.00 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 52818.00 ± 0% 33.00 ± 0% -99.94% (p=0.000 n=10)
ReadAll/1MiB-4 107780.00 ± 0% 35.00 ± 0% -99.97% (p=0.000 n=10)
ReadAll/4MiB-4 422234.00 ± 0% 39.00 ± 0% -99.99% (p=0.000 n=10)
ReadAll/16MiB-4 1662544.00 ± 0% 42.00 ± 0% -100.00% (p=0.000 n=10)
Write/500KiB-4 4803.000 ± 0% 7.000 ± 0% -99.85% (p=0.000 n=10)
Write/1MiB-4 9820.000 ± 0% 7.000 ± 0% -99.93% (p=0.000 n=10)
Write/4MiB-4 38413.000 ± 0% 7.000 ± 0% -99.98% (p=0.000 n=10)
Write/16MiB-4 151178.000 ± 0% 7.000 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/500KiB-4 57620.00 ± 0% 15.00 ± 0% -99.97% (p=0.000 n=10)
RoundTrip/1MiB-4 117583.00 ± 0% 15.00 ± 0% -99.99% (p=0.000 n=10)
RoundTrip/4MiB-4 460627.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
RoundTrip/16MiB-4 1813699.00 ± 0% 15.00 ± 0% -100.00% (p=0.000 n=10)
DOMRead/500KiB-4 29.00 ± 0%
DOMRead/1MiB-4 29.00 ± 0%
DOMRead/4MiB-4 29.00 ± 0%
DOMRead/16MiB-4 29.00 ± 0%
DOMWrite/500KiB-4 7.000 ± 0%
DOMWrite/1MiB-4 7.000 ± 0%
DOMWrite/4MiB-4 7.000 ± 0%
DOMWrite/16MiB-4 7.000 ± 0%
geomean 141.1k 14.11 -99.99%
vs. simdjson-go
goos: linux
goarch: amd64
pkg: benchmarks
cpu: AMD EPYC 9V74 80-Core Processor
│ simdjson │ yyjson │
│ sec/op │ sec/op vs base │
Read/500KiB-4 2.639m ± 1% 3.192m ± 0% +20.96% (p=0.000 n=10)
Read/1MiB-4 5.333m ± 1% 6.539m ± 0% +22.61% (p=0.000 n=10)
Read/4MiB-4 19.76m ± 2% 19.45m ± 0% ~ (p=0.143 n=10)
Read/16MiB-4 77.00m ± 2% 67.87m ± 0% -11.87% (p=0.000 n=10)
ReadAll/500KiB-4 2.715m ± 1% 3.340m ± 0% +23.05% (p=0.000 n=10)
ReadAll/1MiB-4 5.664m ± 2% 6.868m ± 0% +21.27% (p=0.000 n=10)
ReadAll/4MiB-4 20.17m ± 3% 21.13m ± 1% +4.76% (p=0.000 n=10)
ReadAll/16MiB-4 81.88m ± 1% 72.40m ± 3% -11.58% (p=0.000 n=10)
Write/500KiB-4 1.929m ± 0% 1.835m ± 0% -4.84% (p=0.000 n=10)
Write/1MiB-4 3.896m ± 1% 3.701m ± 0% -5.00% (p=0.000 n=10)
Write/4MiB-4 15.07m ± 0% 12.70m ± 0% -15.76% (p=0.000 n=10)
Write/16MiB-4 59.09m ± 2% 48.78m ± 0% -17.45% (p=0.000 n=10)
RoundTrip/500KiB-4 4.511m ± 1% 5.029m ± 0% +11.48% (p=0.000 n=10)
RoundTrip/1MiB-4 9.140m ± 1% 10.198m ± 0% +11.58% (p=0.000 n=10)
RoundTrip/4MiB-4 36.71m ± 1% 32.23m ± 1% -12.21% (p=0.000 n=10)
RoundTrip/16MiB-4 140.1m ± 1% 118.2m ± 1% -15.58% (p=0.000 n=10)
DOMRead/500KiB-4 3.288m ± 0%
DOMRead/1MiB-4 6.642m ± 0%
DOMRead/4MiB-4 19.53m ± 0%
DOMRead/16MiB-4 67.99m ± 0%
DOMWrite/500KiB-4 1.807m ± 0%
DOMWrite/1MiB-4 3.661m ± 0%
DOMWrite/4MiB-4 12.65m ± 0%
DOMWrite/16MiB-4 48.89m ± 0%
geomean 13.12m 12.09m +0.19%
│ simdjson │ yyjson │
│ B/s │ B/s vs base │
Read/500KiB-4 185.0Mi ± 1% 153.0Mi ± 0% -17.33% (p=0.000 n=10)
Read/1MiB-4 187.5Mi ± 1% 152.9Mi ± 0% -18.44% (p=0.000 n=10)
Read/4MiB-4 202.4Mi ± 2% 205.6Mi ± 0% ~ (p=0.138 n=10)
Read/16MiB-4 207.8Mi ± 2% 235.8Mi ± 0% +13.46% (p=0.000 n=10)
ReadAll/500KiB-4 179.9Mi ± 1% 146.2Mi ± 0% -18.73% (p=0.000 n=10)
ReadAll/1MiB-4 176.6Mi ± 2% 145.6Mi ± 0% -17.54% (p=0.000 n=10)
ReadAll/4MiB-4 198.3Mi ± 2% 189.3Mi ± 1% -4.54% (p=0.000 n=10)
ReadAll/16MiB-4 195.4Mi ± 1% 221.0Mi ± 3% +13.09% (p=0.000 n=10)
Write/500KiB-4 253.2Mi ± 0% 266.0Mi ± 0% +5.08% (p=0.000 n=10)
Write/1MiB-4 256.7Mi ± 1% 270.2Mi ± 0% +5.26% (p=0.000 n=10)
Write/4MiB-4 265.4Mi ± 0% 315.0Mi ± 0% +18.70% (p=0.000 n=10)
Write/16MiB-4 270.8Mi ± 2% 328.0Mi ± 0% +21.14% (p=0.000 n=10)
RoundTrip/500KiB-4 108.24Mi ± 1% 97.09Mi ± 0% -10.30% (p=0.000 n=10)
RoundTrip/1MiB-4 109.41Mi ± 1% 98.06Mi ± 0% -10.38% (p=0.000 n=10)
RoundTrip/4MiB-4 109.0Mi ± 1% 124.1Mi ± 1% +13.90% (p=0.000 n=10)
RoundTrip/16MiB-4 114.2Mi ± 1% 135.3Mi ± 1% +18.46% (p=0.000 n=10)
DOMRead/500KiB-4 148.5Mi ± 0%
DOMRead/1MiB-4 150.6Mi ± 0%
DOMRead/4MiB-4 204.8Mi ± 0%
DOMRead/16MiB-4 235.3Mi ± 0%
DOMWrite/500KiB-4 270.2Mi ± 0%
DOMWrite/1MiB-4 273.1Mi ± 0%
DOMWrite/4MiB-4 316.3Mi ± 0%
DOMWrite/16MiB-4 327.2Mi ± 0%
geomean 180.2Mi 195.6Mi -0.19%
│ simdjson │ yyjson │
│ B/op │ B/op vs base │
Read/500KiB-4 4449836.0 ± 0% 808.0 ± 0% -99.98% (p=0.000 n=10)
Read/1MiB-4 9004590.5 ± 0% 808.0 ± 0% -99.99% (p=0.000 n=10)
Read/4MiB-4 35489331.5 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
Read/16MiB-4 141420072.0 ± 0% 808.0 ± 0% -100.00% (p=0.000 n=10)
ReadAll/500KiB-4 5.251Mi ± 0% 1.008Mi ± 0% -80.80% (p=0.000 n=10)
ReadAll/1MiB-4 10.712Mi ± 0% 2.126Mi ± 0% -80.16% (p=0.000 n=10)
ReadAll/4MiB-4 43.376Mi ± 0% 9.532Mi ± 0% -78.03% (p=0.000 n=10)
ReadAll/16MiB-4 169.42Mi ± 0% 34.55Mi ± 0% -79.61% (p=0.000 n=10)
Write/500KiB-4 2478.7Ki ± 0% 504.5Ki ± 0% -79.65% (p=0.000 n=10)
Write/1MiB-4 4.999Mi ± 0% 1.000Mi ± 0% -79.99% (p=0.000 n=10)
Write/4MiB-4 20.132Mi ± 0% 4.000Mi ± 0% -80.13% (p=0.000 n=10)
Write/16MiB-4 97.88Mi ± 0% 16.00Mi ± 0% -83.65% (p=0.000 n=10)
RoundTrip/500KiB-4 6824.3Ki ± 0% 505.0Ki ± 0% -92.60% (p=0.000 n=10)
RoundTrip/1MiB-4 13.586Mi ± 0% 1.001Mi ± 0% -92.63% (p=0.000 n=10)
RoundTrip/4MiB-4 53.977Mi ± 0% 4.001Mi ± 0% -92.59% (p=0.000 n=10)
RoundTrip/16MiB-4 232.75Mi ± 0% 16.00Mi ± 0% -93.13% (p=0.000 n=10)
DOMRead/500KiB-4 2.398Ki ± 0%
DOMRead/1MiB-4 2.398Ki ± 0%
DOMRead/4MiB-4 2.398Ki ± 0%
DOMRead/16MiB-4 2.398Ki ± 0%
DOMWrite/500KiB-4 504.5Ki ± 0%
DOMWrite/1MiB-4 1.000Mi ± 0%
DOMWrite/4MiB-4 4.000Mi ± 0%
DOMWrite/16MiB-4 16.00Mi ± 0%
geomean 21.35Mi 228.6Ki -98.19%
│ simdjson │ yyjson │
│ allocs/op │ allocs/op vs base │
Read/500KiB-4 16.00 ± 0% 10.00 ± 0% -37.50% (p=0.000 n=10)
Read/1MiB-4 16.00 ± 0% 10.00 ± 0% -37.50% (p=0.000 n=10)
Read/4MiB-4 16.00 ± 0% 10.00 ± 0% -37.50% (p=0.000 n=10)
Read/16MiB-4 16.00 ± 0% 10.00 ± 0% -37.50% (p=0.000 n=10)
ReadAll/500KiB-4 39.00 ± 0% 33.00 ± 0% -15.38% (p=0.000 n=10)
ReadAll/1MiB-4 41.00 ± 0% 35.00 ± 0% -14.63% (p=0.000 n=10)
ReadAll/4MiB-4 45.00 ± 0% 39.00 ± 0% -13.33% (p=0.000 n=10)
ReadAll/16MiB-4 48.00 ± 0% 42.00 ± 0% -12.50% (p=0.000 n=10)
Write/500KiB-4 30.000 ± 0% 7.000 ± 0% -76.67% (p=0.000 n=10)
Write/1MiB-4 33.000 ± 0% 7.000 ± 0% -78.79% (p=0.000 n=10)
Write/4MiB-4 39.000 ± 0% 7.000 ± 0% -82.05% (p=0.000 n=10)
Write/16MiB-4 46.000 ± 0% 7.000 ± 0% -84.78% (p=0.000 n=10)
RoundTrip/500KiB-4 46.00 ± 0% 15.00 ± 0% -67.39% (p=0.000 n=10)
RoundTrip/1MiB-4 49.00 ± 0% 15.00 ± 0% -69.39% (p=0.000 n=10)
RoundTrip/4MiB-4 55.00 ± 0% 15.00 ± 0% -72.73% (p=0.000 n=10)
RoundTrip/16MiB-4 62.00 ± 0% 15.00 ± 0% -75.81% (p=0.000 n=10)
DOMRead/500KiB-4 29.00 ± 0%
DOMRead/1MiB-4 29.00 ± 0%
DOMRead/4MiB-4 29.00 ± 0%
DOMRead/16MiB-4 29.00 ± 0%
DOMWrite/500KiB-4 7.000 ± 0%
DOMWrite/1MiB-4 7.000 ± 0%
DOMWrite/4MiB-4 7.000 ± 0%
DOMWrite/16MiB-4 7.000 ± 0%
geomean 33.93 14.11 -58.60%
Summary
Run on an AMD EPYC 9V74, 10 iterations each, across payload sizes from 500 KiB to
16 MiB. Percentages are benchstat geomean deltas over rows present in both packages.
In non-std comparisons, DOMRead
and DOMWrite are yyjson-only
rows and don't factor into those package deltas.
| pkg | Speed (geomean) | Go heap memory (geomean) | Go heap allocations (geomean) |
|---|---|---|---|
encoding/json (std) | -72.6% | -98.7% | -100% |
json-iterator | -64.9% | -97.8% | -100% |
segmentio/encoding/json | -61.1% | -97.0% | -99.9% |
go-json | -68.4% | -97.7% | -100% |
bytedance/sonic | -44.4% | -98.4% | -100% |
simdjson-go | +0.2% | -98.2% | -58.6% |
Note
Memory and allocation columns come from Go heap bytes/op and allocs/op. Arena memory used internally by yyjson is not counted.
Key takeaways:
- 2-4x faster than the standard library across document operations. The gap grows with payload size - at 16 MiB, reads are nearly 4x faster and writes nearly 5x faster.
- Far fewer Go heap allocations.
Readuses roughly 10 Go heap objects per call regardless of payload size. Reflection-based libraries in this benchmark reach into the hundreds of thousands. - Competitive with SIMD-accelerated libraries. yyjson is ~44% faster than sonic (JIT-based) and essentially matches simdjson-go (SIMD-based) overall.
Run benchmarks yourself:
make -C benchmarks bench
make -C benchmarks benchstats
Development
See CONTRIBUTING.md for contribution guidelines. See DEVELOPMENT.md too.
License
This package is licensed under the Apache License 2.0. See LICENSE.
Submodules are licensed under their own terms. See yyjson/ for the upstream
license.