Vize

Blacksmith Benchmark Snapshot

This page is generated from the Tool Benchmark workflow so published performance numbers can cite one reproducible runner, input corpus, and commit.

Latest Result

Measured: 2026-06-07T12:20:39.431Z Commit: 41c983ca7ce0 (run) Runner: blacksmith-32vcpu-ubuntu-2404 (32 logical CPU, AMD EPYC, 32 vCPU / 128 GB RAM / 1.5 TB storage) Input: 15,000 generated SFC files (36.9 MB). Median of 5 measured run(s) after 1 warmup run(s). Large SFC: 900 repeated template blocks (674.9 KB). Nuxt import set: 500 SFC files.

Surface Files Existing tool Existing median Vize 1T Vize max Speedup
SFC compile 15,000 @vue/compiler-sfc (1T) 8.64s 2.57s 259.4ms 33.3x
Large SFC compile 1 @vue/compiler-sfc (1T) 197.5ms 66.3ms 62.8ms 3.1x
Large SFC type check 1 vue-tsc 1.58s 161.2ms 163.2ms 9.7x
Lint 15,000 eslint-plugin-vue (1T) 40.71s 1.18s 215.0ms 189.3x
Format 15,000 Prettier CLI 81.53s 3.57s 1.32s 61.7x
Type check 500 vue-tsc 3.86s 634.6ms 596.8ms 6.5x
Vite build (end-to-end) 1,000 @vitejs/plugin-vue 953.2ms n/a 466.9ms 2.0x
Nuxt SPA build (end-to-end) 500 Nuxt default compiler 5.08s n/a 4.92s 1.0x

Fairness notes:

  • All tools run on the same generated Vue SFC corpus from the same checkout and lockfile.

  • The 15,000-SFC rows are the many-file workload; the large-SFC rows isolate one large component.

  • Reported times are medians; measured runs alternate variant order after warmup runs.

  • Destructive formatter runs receive a fresh copy of the same input before each invocation.

  • SFC compile Vize max uses compileSfcBatchWithResults wall time so the primary number includes generated output crossing the JS/native boundary; the stats-only native timeMs is shown only in variant details.

  • Vite build timings exclude fixture copy/setup; the Vize max lane sets precompileBatchSize to the benchmark file count so Blacksmith max runs one native precompile batch instead of the memory-safe default chunks.

  • Nuxt SPA build timings exclude synthetic app generation and compare nuxt build with Nuxt's default compiler against the same app with @vizejs/nuxt installed.

  • Single-thread lanes are shown where useful, and the primary speedup compares the incumbent default/single-thread lane with Vize's max runner lane.

Commands:

gh workflow run tool-benchmark.yml --ref <branch> -f file_count=15000 -f check_file_count=500 -f vite_file_count=1000 -f nuxt_file_count=500 -f large_blocks=900 -f runs=5 -f warmups=1 -f commit_results=true
node bench/generate.mjs 15000
node bench/compare-tools.mjs --input bench/__in__ --vize-bin target/release/vize --runs 5 --warmups 1 --check-file-count 500 --vite-file-count 1000 --nuxt-file-count 500 --large-blocks 900 --runner-label "blacksmith-32vcpu-ubuntu-2404" --out tool-benchmark-summary.md --json tool-benchmark-results.json --doc performance-blacksmith.md
Variant details and raw run times

SFC compile

Variant Median Throughput Raw measured runs
@vue/compiler-sfc (1T) 8.64s 1.7k files/s 8.80s, 8.46s, 8.62s, 8.64s, 8.81s
@vue/compiler-sfc (32 workers) 3.09s 4.9k files/s 3.28s, 3.09s, 2.98s, 3.06s, 3.38s
Vize native loop (1T) 2.57s 5.8k files/s 2.45s, 2.51s, 2.57s, 2.73s, 2.58s
Vize native batch results (max) 259.4ms 57.8k files/s 245.5ms, 259.4ms, 260.4ms, 250.7ms, 267.5ms
Vize native batch stats-only (core max) 23.0ms 653.2k files/s 23.0ms, 22.8ms, 23.7ms, 22.8ms, 25.0ms

Large SFC compile

Variant Median Throughput Raw measured runs
@vue/compiler-sfc (1T) 197.5ms 5 files/s 200.8ms, 197.5ms, 197.8ms, 194.2ms, 186.5ms
@vue/compiler-sfc (1 workers) 444.5ms 2 files/s 444.5ms, 442.8ms, 442.5ms, 445.4ms, 474.7ms
Vize native loop (1T) 66.3ms 15 files/s 67.9ms, 62.7ms, 66.3ms, 62.0ms, 72.8ms
Vize native batch results (max) 62.8ms 16 files/s 62.5ms, 62.8ms, 63.1ms, 61.7ms, 68.0ms
Vize native batch stats-only (core max) 61.7ms 16 files/s 61.8ms, 61.7ms, 61.6ms, 60.9ms, 62.5ms

Large SFC type check

Variant Median Throughput Raw measured runs
vue-tsc 1.58s 1 files/s 1.65s, 1.63s, 1.58s, 1.57s, 1.58s
Vize check (1T) 161.2ms 6 files/s 161.2ms, 161.2ms, 164.7ms, 161.1ms, 162.6ms
Vize check (max) 163.2ms 6 files/s 164.8ms, 160.1ms, 163.7ms, 163.2ms, 161.4ms

Lint

Variant Median Throughput Raw measured runs
eslint-plugin-vue (1T) 40.71s 368 files/s 40.71s, 41.25s, 40.58s, 40.96s, 40.58s
eslint-plugin-vue (32 workers) 10.67s 1.4k files/s 10.73s, 10.38s, 10.67s, 10.37s, 10.93s
Vize lint (1T) 1.18s 12.7k files/s 1.22s, 1.15s, 1.15s, 1.20s, 1.18s
Vize lint (max) 215.0ms 69.8k files/s 207.4ms, 212.3ms, 215.0ms, 215.4ms, 218.5ms

Format

Variant Median Throughput Raw measured runs
Prettier CLI 81.53s 184 files/s 82.33s, 80.63s, 81.80s, 80.42s, 81.53s
Vize fmt (1T) 3.57s 4.2k files/s 3.57s, 3.62s, 3.40s, 3.59s, 3.57s
Vize fmt (max) 1.32s 11.3k files/s 1.33s, 1.29s, 1.30s, 1.33s, 1.32s

Type check

Variant Median Throughput Raw measured runs
vue-tsc 3.86s 130 files/s 3.93s, 3.86s, 3.90s, 3.73s, 3.84s
Vize check (1T) 634.6ms 788 files/s 616.0ms, 636.9ms, 634.6ms, 628.8ms, 646.8ms
Vize check (max) 596.8ms 838 files/s 596.8ms, 591.7ms, 609.5ms, 590.7ms, 602.4ms

Vite build (end-to-end)

Variant Median Throughput Raw measured runs
@vitejs/plugin-vue 953.2ms 1.0k files/s 998.0ms, 1.13s, 946.1ms, 951.3ms, 953.2ms
@vizejs/vite-plugin 466.9ms 2.1k files/s 466.9ms, 429.1ms, 468.1ms, 474.0ms, 430.7ms

Nuxt SPA build (end-to-end)

Variant Median Throughput Raw measured runs
Nuxt default compiler 5.08s 98 files/s 5.10s, 5.12s, 5.08s, 4.98s, 4.88s
@vizejs/nuxt 4.92s 102 files/s 4.79s, 4.92s, 4.98s, 4.92s, 4.91s