Performance · measured, not mythologised
Fast enough to be a final step without pretending every benchmark is universal.
Minify++ is a native, whole-buffer scanner with a small dependency surface. Its benchmark exists primarily as a regression gate: correctness becomes green first, then speed and memory are measured on repeatable fixtures.
Current reference environment
-O2 release buildCheckpoint medians
| Format | Input | Output | Median | Throughput |
|---|---|---|---|---|
| HTML | 760 KB | 760 KB | 6.700 ms | 108.2 MiB/s |
| CSS | 1.00 MB | 860 KB | 5.568 ms | 171.3 MiB/s |
| JavaScript | 850 KB | 740 KB | 13.496 ms | 60.1 MiB/s |
| JSX | 1.16 MB | 1.08 MB | 24.013 ms | 46.1 MiB/s |
| JSON | 710 KB | 700 KB | 77.190 ms | 8.8 MiB/s |
| XML | 790 KB | 790 KB | 5.343 ms | 141.0 MiB/s |
| SVG | 960 KB | 960 KB | 5.884 ms | 155.6 MiB/s |
Aggregate peak resident memory for the benchmark run was approximately 21 MiB (21,344 KiB).
How to read these numbers
The fixtures intentionally exercise each scanner, but they are not a survey of the web. Output size depends on how much removable formatting the input contains. XML and SVG fixtures may remain almost unchanged because conservative preservation is part of their contract.
Reproduce the gate
make benchmark
# or choose fixture repetitions and iterations
./.build/minifypp-benchmark 10000 20 When publishing a new result, record the commit, compiler, flags, host, workload, iteration count, output size and peak memory. Benchmark only after the semantic gates pass.
For cross-tool CSS output-size comparisons and the same-host comparison harness, see Benchmarks.
Performance philosophy
- Never trade correctness for a favorable chart.
- Track Minify++ against its own comparable baseline.
- Treat startup, throughput, output size and memory as separate dimensions.
- Explain when conservative preservation produces larger output.
- Add representative fixtures when a major format path changes.