fastjson benchmark

May 10, 2026 · View on GitHub

  • PHP 8.4.22-dev
  • fastjson 0.1.0 (yyjson 0.12.0)
  • ext/json 8.4.22-dev
  • 200 iterations per case (slowest 10% dropped)
  • CPU: 13th Gen Intel(R) Core(TM) i9-13950HX

Throughput, large corpus

Decode (objects)

FileSizefastjsonext/jsonspeedup
apache_builds.json124.3 KB1,042.2 MB/s396.9 MB/s2.63x
canada.json2.15 MB467.6 MB/s102.4 MB/s4.57x
citm_catalog.json1.65 MB1,021.9 MB/s490.2 MB/s2.08x
github_events.json63.6 KB1,379.1 MB/s452.7 MB/s3.05x
gsoc-2018.json3.17 MB1,150.2 MB/s340.1 MB/s3.38x
instruments.json215.2 KB850.0 MB/s342.6 MB/s2.48x
marine_ik.json2.85 MB323.3 MB/s200.1 MB/s1.62x
mesh.json706.6 KB521.3 MB/s210.4 MB/s2.48x
mesh.pretty.json1.50 MB743.2 MB/s270.7 MB/s2.75x
numbers.json146.6 KB1,039.6 MB/s245.5 MB/s4.23x
random.json498.5 KB520.4 MB/s270.7 MB/s1.92x
stringifiedphp.json139.9 KB2,697.4 MB/s364.4 MB/s7.40x
twitter.json616.7 KB1,082.4 MB/s425.5 MB/s2.54x
twitterescaped.json549.2 KB880.5 MB/s325.0 MB/s2.71x
update-center.json520.7 KB644.7 MB/s291.3 MB/s2.21x

Decode (assoc arrays)

FileSizefastjsonext/jsonspeedup
apache_builds.json124.3 KB1,118.3 MB/s427.1 MB/s2.62x
canada.json2.15 MB449.8 MB/s105.0 MB/s4.28x
citm_catalog.json1.65 MB1,216.2 MB/s519.0 MB/s2.34x
github_events.json63.6 KB1,436.2 MB/s449.9 MB/s3.19x
gsoc-2018.json3.17 MB1,135.3 MB/s370.7 MB/s3.06x
instruments.json215.2 KB895.1 MB/s394.9 MB/s2.27x
marine_ik.json2.85 MB340.9 MB/s211.1 MB/s1.61x
mesh.json706.6 KB511.6 MB/s208.8 MB/s2.45x
mesh.pretty.json1.50 MB832.9 MB/s270.7 MB/s3.08x
numbers.json146.6 KB1,015.7 MB/s259.3 MB/s3.92x
random.json498.5 KB596.8 MB/s300.1 MB/s1.99x
stringifiedphp.json139.9 KB2,790.9 MB/s376.2 MB/s7.42x
twitter.json616.7 KB1,184.1 MB/s451.0 MB/s2.63x
twitterescaped.json549.2 KB978.3 MB/s350.7 MB/s2.79x
update-center.json520.7 KB719.4 MB/s305.9 MB/s2.35x

Encode

FileSizefastjsonext/jsonspeedup
apache_builds.json124.3 KB1,681.2 MB/s1,260.0 MB/s1.33x
canada.json2.15 MB801.2 MB/s60.3 MB/s13.28x
citm_catalog.json1.65 MB3,156.2 MB/s2,483.2 MB/s1.27x
github_events.json63.6 KB1,997.4 MB/s1,297.9 MB/s1.54x
gsoc-2018.json3.17 MB1,393.8 MB/s778.7 MB/s1.79x
instruments.json215.2 KB2,237.8 MB/s1,810.1 MB/s1.24x
marine_ik.json2.85 MB698.2 MB/s136.3 MB/s5.12x
mesh.json706.6 KB766.7 MB/s89.2 MB/s8.60x
mesh.pretty.json1.50 MB1,668.3 MB/s191.8 MB/s8.70x
numbers.json146.6 KB575.0 MB/s54.7 MB/s10.50x
random.json498.5 KB929.0 MB/s651.4 MB/s1.43x
stringifiedphp.json139.9 KB3,099.3 MB/s790.3 MB/s3.92x
twitter.json616.7 KB1,658.2 MB/s1,113.7 MB/s1.49x
twitterescaped.json549.2 KB1,502.5 MB/s1,011.6 MB/s1.49x
update-center.json520.7 KB1,071.0 MB/s843.8 MB/s1.27x

Validate

FileSizefastjsonext/jsonspeedup
apache_builds.json124.3 KB2,643.6 MB/s451.9 MB/s5.85x
canada.json2.15 MB917.7 MB/s115.2 MB/s7.97x
citm_catalog.json1.65 MB2,663.2 MB/s561.7 MB/s4.74x
github_events.json63.6 KB3,122.1 MB/s497.2 MB/s6.28x
gsoc-2018.json3.17 MB1,589.6 MB/s388.0 MB/s4.10x
instruments.json215.2 KB2,174.3 MB/s445.1 MB/s4.88x
marine_ik.json2.85 MB863.7 MB/s266.6 MB/s3.24x
mesh.json706.6 KB1,257.4 MB/s223.5 MB/s5.63x
mesh.pretty.json1.50 MB1,673.3 MB/s277.7 MB/s6.03x
numbers.json146.6 KB1,501.1 MB/s265.6 MB/s5.65x
random.json498.5 KB1,582.9 MB/s365.1 MB/s4.34x
stringifiedphp.json139.9 KB2,939.4 MB/s366.9 MB/s8.01x
twitter.json616.7 KB2,801.5 MB/s560.4 MB/s5.00x
twitterescaped.json549.2 KB2,539.9 MB/s403.7 MB/s6.29x
update-center.json520.7 KB2,288.8 MB/s358.5 MB/s6.38x

Throughput, small corpus

Decode (objects)

FileSizefastjsonext/jsonfast/callext/callspeedup
adversarial.json80 B345.2 MB/s187.0 MB/s221 ns408 ns1.85x
demo.json387 B820.2 MB/s335.5 MB/s450 ns1.1 µs2.44x
flatadversarial.json64 B285.2 MB/s144.3 MB/s214 ns423 ns1.98x
repeat.json11.1 KB979.3 MB/s472.8 MB/s11.1 µs22.9 µs2.07x
truenull.json11.7 KB903.2 MB/s213.7 MB/s12.7 µs53.6 µs4.23x
twitter_timeline.json41.2 KB955.6 MB/s341.0 MB/s42.1 µs118.1 µs2.80x

Decode (assoc arrays)

FileSizefastjsonext/jsonfast/callext/callspeedup
adversarial.json80 B381.5 MB/s197.1 MB/s200 ns387 ns1.94x
demo.json387 B932.0 MB/s354.2 MB/s396 ns1.0 µs2.63x
flatadversarial.json64 B319.6 MB/s153.7 MB/s191 ns397 ns2.08x
repeat.json11.1 KB1,143.7 MB/s516.8 MB/s9.5 µs21.0 µs2.21x
truenull.json11.7 KB903.9 MB/s214.1 MB/s12.7 µs53.5 µs4.22x
twitter_timeline.json41.2 KB1,064.0 MB/s344.1 MB/s37.9 µs117.0 µs3.09x

Encode

FileSizefastjsonext/jsonfast/callext/callspeedup
adversarial.json80 B641.1 MB/s641.1 MB/s119 ns119 ns1.00x
demo.json387 B1,647.6 MB/s1,351.9 MB/s224 ns273 ns1.22x
flatadversarial.json64 B473.1 MB/s321.2 MB/s129 ns190 ns1.47x
repeat.json11.1 KB1,762.7 MB/s1,030.1 MB/s6.1 µs10.5 µs1.71x
truenull.json11.7 KB2,323.7 MB/s1,561.9 MB/s4.9 µs7.3 µs1.49x
twitter_timeline.json41.2 KB1,665.8 MB/s1,183.4 MB/s24.2 µs34.0 µs1.41x

Validate

FileSizefastjsonext/jsonfast/callext/callspeedup
adversarial.json80 B699.9 MB/s215.5 MB/s109 ns354 ns3.25x
demo.json387 B1,864.0 MB/s395.2 MB/s198 ns934 ns4.72x
flatadversarial.json64 B586.9 MB/s174.9 MB/s104 ns349 ns3.36x
repeat.json11.1 KB2,131.9 MB/s583.8 MB/s5.1 µs18.6 µs3.65x
truenull.json11.7 KB2,466.9 MB/s256.9 MB/s4.6 µs44.5 µs9.60x
twitter_timeline.json41.2 KB2,909.1 MB/s413.4 MB/s13.8 µs97.4 µs7.04x

Memory peak (single-call delta)

Lower is better. The ratio is fastjson / ext-json peak heap; values above 1.0 mean fastjson uses more memory. This is the expected price of yyjson's two-stage model (build a doc, then walk into zvals or write a string), versus ext/json's streaming parser/writer that emits results directly.

Decode (objects)

FileSizefastjsonext/jsonfast/ext
apache_builds.json124.3 KB860.0 KB603.8 KB1.42x
canada.json2.15 MB20.80 MB12.92 MB1.61x
citm_catalog.json1.65 MB9.58 MB5.82 MB1.65x
github_events.json63.6 KB320.8 KB192.5 KB1.67x
gsoc-2018.json3.17 MB11.89 MB5.54 MB2.15x
instruments.json215.2 KB1.28 MB871.6 KB1.51x
marine_ik.json2.85 MB24.05 MB14.80 MB1.62x
mesh.json706.6 KB5.05 MB2.52 MB2.01x
mesh.pretty.json1.50 MB5.53 MB2.52 MB2.20x
numbers.json146.6 KB800.1 KB260.1 KB3.08x
random.json498.5 KB5.11 MB3.32 MB1.54x
adversarial.json80 B1.3 KB952 B1.44x
demo.json387 B2.8 KB1.9 KB1.50x
flatadversarial.json64 B1.1 KB760 B1.53x
repeat.json11.1 KB79.4 KB55.4 KB1.43x
truenull.json11.7 KB80.1 KB36.1 KB2.22x
twitter_timeline.json41.2 KB338.5 KB179.6 KB1.89x
stringifiedphp.json139.9 KB276.1 KB136.0 KB2.03x
twitter.json616.7 KB3.20 MB1.95 MB1.64x
twitterescaped.json549.2 KB3.96 MB1.95 MB2.04x
update-center.json520.7 KB4.65 MB2.75 MB1.69x

Decode (assoc arrays)

FileSizefastjsonext/jsonfast/ext
apache_builds.json124.3 KB825.4 KB569.2 KB1.45x
canada.json2.15 MB20.80 MB12.92 MB1.61x
citm_catalog.json1.65 MB9.16 MB5.39 MB1.70x
github_events.json63.6 KB313.8 KB185.4 KB1.69x
gsoc-2018.json3.17 MB11.66 MB5.31 MB2.20x
instruments.json215.2 KB1.25 MB832.1 KB1.53x
marine_ik.json2.85 MB23.68 MB14.43 MB1.64x
mesh.json706.6 KB5.05 MB2.52 MB2.01x
mesh.pretty.json1.50 MB5.53 MB2.52 MB2.20x
numbers.json146.6 KB800.1 KB260.1 KB3.08x
random.json498.5 KB4.95 MB3.17 MB1.57x
adversarial.json80 B1.3 KB912 B1.46x
demo.json387 B2.7 KB1.8 KB1.54x
flatadversarial.json64 B1.1 KB720 B1.56x
repeat.json11.1 KB75.4 KB51.4 KB1.47x
truenull.json11.7 KB80.1 KB36.1 KB2.22x
twitter_timeline.json41.2 KB335.0 KB176.6 KB1.90x
stringifiedphp.json139.9 KB276.1 KB136.0 KB2.03x
twitter.json616.7 KB3.15 MB1.90 MB1.66x
twitterescaped.json549.2 KB3.92 MB1.90 MB2.06x
update-center.json520.7 KB4.58 MB2.68 MB1.71x

Encode

FileSizefastjsonext/jsonfast/ext
apache_builds.json124.3 KB100.0 KB100.0 KB1.00x
canada.json2.15 MB2.00 MB2.00 MB1.00x
citm_catalog.json1.65 MB492.0 KB492.0 KB1.00x
github_events.json63.6 KB56.0 KB56.0 KB1.00x
gsoc-2018.json3.17 MB2.95 MB2.94 MB1.00x
instruments.json215.2 KB108.0 KB108.0 KB1.00x
marine_ik.json2.85 MB1.75 MB1.75 MB1.00x
mesh.json706.6 KB628.0 KB628.0 KB1.00x
mesh.pretty.json1.50 MB628.0 KB628.0 KB1.00x
numbers.json146.6 KB148.0 KB148.0 KB1.00x
random.json498.5 KB656.0 KB656.0 KB1.00x
adversarial.json80 B4.0 KB336 B12.19x
demo.json387 B4.0 KB256 B16.00x
flatadversarial.json64 B4.0 KB352 B11.64x
repeat.json11.1 KB12.0 KB12.0 KB1.00x
truenull.json11.7 KB12.0 KB12.0 KB1.00x
twitter_timeline.json41.2 KB44.0 KB44.0 KB1.00x
stringifiedphp.json139.9 KB808.0 KB140.0 KB5.77x
twitter.json616.7 KB556.0 KB556.0 KB1.00x
twitterescaped.json549.2 KB556.0 KB556.0 KB1.00x
update-center.json520.7 KB536.0 KB532.0 KB1.01x

Validate

FileSizefastjsonext/jsonfast/ext
apache_builds.json124.3 KB128.1 KB512 B256.13x
canada.json2.15 MB2.15 MB48 B46,935.17x
citm_catalog.json1.65 MB1.65 MB80 B21,607.20x
github_events.json63.6 KB64.1 KB8.0 KB8.01x
gsoc-2018.json3.17 MB3.18 MB3.0 KB1,084.03x
instruments.json215.2 KB216.1 KB64 B3,457.00x
marine_ik.json2.85 MB2.85 MB64 B46,657.38x
mesh.json706.6 KB708.1 KB40 B18,126.40x
mesh.pretty.json1.50 MB1.51 MB40 B39,528.00x
numbers.json146.6 KB148.1 KB0 B
random.json498.5 KB500.1 KB64 B8,001.00x
adversarial.json80 B160 B40 B4.00x
demo.json387 B512 B64 B8.00x
flatadversarial.json64 B144 B32 B4.50x
repeat.json11.1 KB12.1 KB64 B193.00x
truenull.json11.7 KB12.1 KB0 B
twitter_timeline.json41.2 KB44.1 KB256 B176.25x
stringifiedphp.json139.9 KB140.1 KB136.0 KB1.03x
twitter.json616.7 KB620.1 KB512 B1,240.13x
twitterescaped.json549.2 KB552.1 KB512 B1,104.13x
update-center.json520.7 KB524.1 KB1.3 KB419.25x

Aggregate (sum across all files)

Throughput, large corpus

OperationBytesfastjsonext/jsonspeedup
Decode (objects)14.81 MB602.3 MB/s226.8 MB/s2.66x
Decode (assoc arrays)14.81 MB628.3 MB/s236.9 MB/s2.65x
Encode14.81 MB1,092.2 MB/s180.1 MB/s6.06x
Validate14.81 MB1,352.1 MB/s265.2 MB/s5.10x

Throughput, small corpus

OperationBytesfastjsonext/jsonspeedup
Decode (objects)64.6 KB944.5 MB/s320.9 MB/s2.94x
Decode (assoc arrays)64.6 KB1,037.6 MB/s326.3 MB/s3.18x
Encode64.6 KB1,765.3 MB/s1,202.0 MB/s1.47x
Validate64.6 KB2,630.1 MB/s388.9 MB/s6.76x

Memory peak (across all files)

Operationfastjsonext/jsonfast/ext
Decode (objects)97.81 MB56.37 MB1.74x
Decode (assoc arrays)96.38 MB54.94 MB1.75x
Encode11.92 MB11.24 MB1.06x
Validate14.91 MB150.6 KB101.40x

Throughput: higher is better; speedup = ext/json time / fastjson time. Memory: lower is better; ratio = fastjson peak / ext/json peak (>1 means fastjson uses more).