Skip to main content
Version: Next (unreleased)

Xisto vs Node

13 Nov 2026, the xisto variants of main e5fb066 (before mandelbrot-8), on the Apple M4 and the two AWS VMs.

Setup​

  • Node programs: the official Node programs of the Benchmarks Game, one per problem, kept in bench/benchmarksgame/node/ (BSD-3): spectral-norm #1, n-body #8, fannkuch-redux #8, binary-trees #7, mandelbrot #1, fasta #1, k-nucleotide #8, reverse-complement #2, regex-redux #4, pidigits #2 and #3. They run on one thread.
  • Runtime: Node v26.12.0 on all three machines (the official Linux tarballs on the VMs, checked against SHASUMS256.txt), run as node PROGRAM.js ARG with no flags.
  • xisto: the same variants as the Rust round, built with XISTO_CPU=native. The xisto variants and what each does are listed on Xisto vs Rust.
  • Command: python3 bench/benchmarksgame/langs.py 3 node=js:NODE bun=js:BUN runs both runtimes in one round, scored with python3 bench/placar.py RESULTS node (see How every run is measured).
  • Steal during the round: +596 on the Xeon, +2,566 on the Graviton2 (mostly in the long Node and Bun runs).

Most xisto variants run on every core (10 on the M4, 2 on the VMs), while the Node programs run on one. The time ratio therefore mixes a faster program with more cores; the CPU columns compare the work done. The ratio in the result column is Node's time divided by xisto's.

Apple M4 (10 cores)​

Source: bench/results/node-bun-mac-m4-2026-11-13-e5fb066.txt.

problemxistoNodexisto timeNode timexisto CPUNode CPUxisto memNode memresult
spectral-normspectralnorm-6spectralnorm-10.069 s1.102 s0.53 s1.11 s2.7 MB46 MBwin, 16.0×
n-bodynbodynbody-81.124 s2.341 s1.12 s2.34 s1.2 MB45 MBwin, 2.1×
fannkuch-reduxfannkuchredux-5fannkuchredux-81.627 s24.913 s15.53 s24.91 s3.6 MB43 MBwin, 15.3×
binary-treesbinarytrees-2 †binarytrees-70.246 s5.194 s1.87 s7.00 s120 MB1,058 MBwin, 21.1×
mandelbrotmandelbrot-6mandelbrot-10.258 s24.489 s2.42 s24.31 s9.4 MB50 MBwin, 94.9×
fastafastafasta-10.232 s9.926 s0.16 s9.93 s2.3 MB50 MBwin, 42.8×
k-nucleotideknucleotide-7knucleotide-80.224 s45.366 s1.62 s45.68 s127 MB704 MBwin, 202.5×
reverse-complementrevcomp-9revcomp-20.124 s1.989 s0.10 s2.04 s12 MB700 MBwin, 16.0×
regex-reduxregexredux-2regexredux-40.259 s1.168 s0.37 s1.23 s242 MB963 MBwin, 4.5×
pidigitspidigitspidigits-20.252 s5.571 s0.25 s5.58 s1.9 MB112 MBwin, 22.1×

Xeon E5-2686 v4 (2 vCPUs)​

Source: bench/results/vm-2026-11-13/node-bun-ubuntu-xeon-2026-11-13-e5fb066.txt.

problemxistoNodexisto timeNode timexisto CPUNode CPUxisto memNode memresult
spectral-normspectralnorm-6spectralnorm-10.459 s3.107 s0.89 s3.13 s2.3 MB57 MBwin, 6.8×
n-bodynbodynbody-82.456 s6.228 s2.45 s6.23 s2.0 MB56 MBwin, 2.5×
fannkuch-reduxfannkuchredux-5fannkuchredux-86.596 s54.671 s13.11 s54.67 s2.3 MB54 MBwin, 8.3×
binary-treesbinarytrees †binarytrees-71.624 s34.939 s3.05 s51.56 s70 MB687 MBwin, 21.5×
mandelbrotmandelbrot-6mandelbrot-11.327 s83.686 s2.53 s83.51 s7.3 MB59 MBwin, 63.1×
fastano row: Node's output differed
k-nucleotideknucleotide-7 †knucleotide-81.384 s135.189 s2.68 s135.81 s69 MB674 MBwin, 97.7×
reverse-complementrevcomp-9revcomp-20.842 s5.301 s0.26 s4.73 s11 MB677 MBwin, 6.3×
regex-reduxregexredux-2regexredux-40.690 s3.967 s0.97 s4.12 s149 MB635 MBwin, 5.7×
pidigitspidigitspidigits-30.625 s10.891 s0.62 s10.93 s2.6 MB121 MBwin, 17.4×

Graviton2 (2 vCPUs)​

Source: bench/results/vm-2026-11-13/node-bun-arm-graviton2-2026-11-13-e5fb066.txt.

problemxistoNodexisto timeNode timexisto CPUNode CPUxisto memNode memresult
spectral-normspectralnorm-7spectralnorm-11.217 s4.037 s2.43 s4.06 s1.8 MB54 MBwin, 3.3×
n-bodynbodynbody-84.610 s10.207 s4.60 s10.21 s1.6 MB54 MBwin, 2.2×
fannkuch-reduxfannkuchredux-5fannkuchredux-88.575 s67.627 s17.13 s67.57 s1.8 MB52 MBwin, 7.9×
binary-treesbinarytrees-3binarytrees-71.832 s27.839 s3.60 s40.02 s114 MB596 MBwin, 15.2×
mandelbrotmandelbrot-7mandelbrot-12.744 s71.269 s5.45 s71.21 s6.8 MB49 MBwin, 26.0×
fastano row: Node's output differed
k-nucleotideknucleotide-7knucleotide-83.011 s220.184 s5.90 s220.99 s64 MB617 MBwin, 73.1×
reverse-complementrevcomp-6 †revcomp-20.282 s4.305 s0.24 s4.36 s188 MB448 MBwin, 15.3×
regex-reduxregexredux-2regexredux-40.799 s4.746 s1.25 s4.95 s149 MB556 MBwin, 5.9×
pidigitspidigitspidigits-22.039 s12.987 s2.04 s13.04 s2.1 MB85 MBwin, 6.4×

Notes​

  • Not scored: fasta on both VMs. Written to a file, the official Node fasta program's output is identical to xisto's. Written to a pipe, as the runner reads every program, it stops after about 1 MB (some 18,000 of 4.2 million lines) and exits with code 0 and no error; how much comes out varies from run to run, Node 24 does the same, and it does not happen at a tenth of the size or under strace. On the M4 the pipe output matched. The program writes one console.log per line; the cause inside Node is still being looked into.
  • CPU: xisto uses less CPU than Node on every row; the largest gaps are k-nucleotide (Node's Map of strings against xisto's packed counts) and mandelbrot (scalar doubles against SIMD vectors).
  • Memory: Node starts at ~45–60 MB before any work; binary-trees, k-nucleotide, reverse-complement and regex-redux reach 600 MB to 1 GB on Node.
  • Before 13 Nov this page compared with Node v24 on the VMs (9 Nov) and with Node 26 on the M4 with single-threaded xisto programs (7 Nov); those files are still in bench/results/.