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-07-09T10:06:01.799Z Commit: 27fe77df7c87 (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 (58.7 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) 17.54s 3.23s 290.8ms 60.3x
Large SFC compile 1 @vue/compiler-sfc (1T) 192.6ms 62.6ms 56.3ms 3.4x
Large SFC type check 1 vue-tsc 1.69s 178.7ms 178.0ms 9.5x
Lint 15,000 eslint-plugin-vue (1T) 54.32s 1.91s 279.3ms 194.5x
Format 15,000 Prettier CLI 143.61s 10.15s 1.79s 80.3x
Type check 500 vue-tsc 5.36s 500.5ms 430.1ms 12.5x
Vite build (end-to-end) 1,000 @vitejs/plugin-vue 1.66s n/a 732.5ms 2.3x
Nuxt SPA build (end-to-end) 500 Nuxt default compiler 6.79s n/a 6.42s 1.1x

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) 17.54s 855 files/s 17.88s, 17.59s, 17.49s, 17.54s, 17.32s
@vue/compiler-sfc (32 workers) 5.90s 2.5k files/s 5.89s, 5.90s, 5.86s, 5.95s, 6.09s
Vize native loop (1T) 3.23s 4.6k files/s 3.10s, 3.13s, 3.36s, 3.36s, 3.23s
Vize native batch results (max) 290.8ms 51.6k files/s 290.8ms, 272.9ms, 302.8ms, 274.7ms, 302.9ms
Vize native batch stats-only (core max) 178.8ms 83.9k files/s 172.9ms, 174.3ms, 178.8ms, 180.3ms, 180.1ms

Large SFC compile

Variant Median Throughput Raw measured runs
@vue/compiler-sfc (1T) 192.6ms 5 files/s 192.6ms, 192.6ms, 197.2ms, 195.9ms, 190.7ms
@vue/compiler-sfc (1 workers) 479.8ms 2 files/s 468.3ms, 475.4ms, 479.8ms, 555.9ms, 493.1ms
Vize native loop (1T) 62.6ms 16 files/s 62.6ms, 55.1ms, 65.2ms, 57.1ms, 65.0ms
Vize native batch results (max) 56.3ms 18 files/s 54.8ms, 54.3ms, 56.3ms, 56.4ms, 56.8ms
Vize native batch stats-only (core max) 55.7ms 18 files/s 56.7ms, 53.4ms, 55.7ms, 55.3ms, 55.8ms

Large SFC type check

Variant Median Throughput Raw measured runs
vue-tsc 1.69s 1 files/s 1.70s, 1.72s, 1.68s, 1.62s, 1.69s
Vize check (1T) 178.7ms 6 files/s 176.2ms, 178.4ms, 179.1ms, 189.4ms, 178.7ms
Vize check (max) 178.0ms 6 files/s 177.7ms, 178.0ms, 177.5ms, 189.5ms, 194.5ms

Lint

Variant Median Throughput Raw measured runs
eslint-plugin-vue (1T) 54.32s 276 files/s 54.32s, 54.44s, 53.47s, 54.35s, 54.06s
eslint-plugin-vue (32 workers) 13.47s 1.1k files/s 13.41s, 13.61s, 13.63s, 13.26s, 13.47s
Vize lint (1T) 1.91s 7.9k files/s 1.88s, 1.84s, 1.91s, 1.91s, 1.97s
Vize lint (max) 279.3ms 53.7k files/s 275.8ms, 272.1ms, 287.9ms, 287.1ms, 279.3ms

Format

Variant Median Throughput Raw measured runs
Prettier CLI 143.61s 104 files/s 142.61s, 142.38s, 143.61s, 145.98s, 144.94s
Vize fmt (1T) 10.15s 1.5k files/s 10.10s, 10.26s, 10.15s, 10.43s, 9.82s
Vize fmt (max) 1.79s 8.4k files/s 1.78s, 1.79s, 1.82s, 1.82s, 1.78s

Type check

Variant Median Throughput Raw measured runs
vue-tsc 5.36s 93 files/s 5.46s, 5.36s, 5.50s, 5.34s, 5.36s
Vize check (1T) 500.5ms 999 files/s 489.1ms, 513.6ms, 500.5ms, 504.0ms, 491.2ms
Vize check (max) 430.1ms 1.2k files/s 427.4ms, 430.1ms, 421.3ms, 438.8ms, 431.3ms

Vite build (end-to-end)

Variant Median Throughput Raw measured runs
@vitejs/plugin-vue 1.66s 601 files/s 1.65s, 1.61s, 1.69s, 1.66s, 1.95s
@vizejs/vite-plugin 732.5ms 1.4k files/s 732.5ms, 713.2ms, 746.2ms, 691.9ms, 752.8ms

Nuxt SPA build (end-to-end)

Variant Median Throughput Raw measured runs
Nuxt default compiler 6.79s 74 files/s 6.74s, 6.73s, 6.86s, 6.89s, 6.79s
@vizejs/nuxt 6.42s 78 files/s 6.36s, 6.42s, 6.31s, 6.50s, 6.50s