Skip to content

Latest commit

 

History

History
185 lines (142 loc) · 5.68 KB

File metadata and controls

185 lines (142 loc) · 5.68 KB

jscpd Performance Comparison: v4 (TypeScript) vs v5 (Rust)

Date: 2026-06-08
Runs per configuration: 10 (fixtures, svelte), 3 (CopilotKit)
Machine: macOS (Apple Silicon)

Versions

Tool Version Runtime
jscpd v4 4.2.5 Node.js
jscpd v5 (cpd) 5.0.4 Native binary (Rust)

Benchmark Targets

Target Files Size Description
fixtures 548 1.5 MB Multi-language test fixtures (126+ formats)
svelte 8,963 38 MB Svelte framework source code
CopilotKit 17,092 159 MB Large real-world TypeScript/React project

Execution Time Results

fixtures (548 files, 1.5 MB)

Metric jscpd v4 jscpd v5 Speedup
Mean real time 1.030s 0.030s 34.3x
Std dev 0.042s 0.000s
Min 1.000s 0.030s
Max 1.130s 0.030s
Mean user time 1.174s 0.085s
Mean sys time 0.074s 0.050s

svelte (8,963 files, 38 MB)

Metric jscpd v4 jscpd v5 Speedup
Mean real time 15.803s 0.428s 36.9x
Std dev 1.010s 0.021s
Min 14.740s 0.390s
Max 17.790s 0.450s
Mean user time 16.075s 0.553s
Mean sys time 0.738s 1.110s

CopilotKit (17,092 files, 159 MB)

Metric jscpd v4 jscpd v5 Speedup
Mean real time 82.890s 3.440s 24.1x
Std dev 4.086s 0.699s
Min 79.560s 2.900s
Max 87.450s 4.230s
Mean user time 100.020s 7.323s
Mean sys time 18.263s 3.100s

Detection Results Comparison

fixtures

Metric jscpd v4 jscpd v5
Files analyzed 364 347
Clones found 211 212
Duplicated lines 9,969 (47.08%) 9,133 (37.12%)
Duplicated tokens 73,416 (47.64%) 56,491 (43.30%)

svelte

Metric jscpd v4 jscpd v5
Files analyzed 11,672 4,322
Clones found 903 1,055
Duplicated lines 18,246 (7.34%) 21,821 (8.78%)

CopilotKit

Metric jscpd v4 jscpd v5
Files analyzed 13,944 12,386
Clones found 12,272 22,487

Raw Timing Data

jscpd v4 — fixtures

Run Real (s) User (s) Sys (s)
1 1.13 1.17 0.10
2 1.00 1.15 0.07
3 1.01 1.16 0.07
4 1.01 1.17 0.07
5 1.00 1.16 0.07
6 1.01 1.17 0.07
7 1.01 1.17 0.07
8 1.02 1.19 0.07
9 1.03 1.20 0.07
10 1.08 1.20 0.08

jscpd v5 — fixtures

Run Real (s) User (s) Sys (s)
1 0.03 0.08 0.05
2 0.03 0.09 0.05
3 0.03 0.08 0.05
4 0.03 0.08 0.05
5 0.03 0.08 0.05
6 0.03 0.09 0.06
7 0.03 0.09 0.04
8 0.03 0.09 0.05
9 0.03 0.08 0.05
10 0.03 0.09 0.05

jscpd v4 — svelte

Run Real (s) User (s) Sys (s)
1 15.98 16.06 0.70
2 15.06 15.55 0.59
3 14.74 15.35 0.56
4 17.37 16.03 1.04
5 17.79 17.54 1.38
6 15.86 16.00 0.72
7 15.11 15.67 0.63
8 15.28 15.89 0.60
9 15.47 15.99 0.59
10 15.37 16.67 0.57

jscpd v5 — svelte

Run Real (s) User (s) Sys (s)
1 0.39 0.55 0.96
2 0.43 0.55 1.23
3 0.40 0.55 0.95
4 0.41 0.54 1.18
5 0.45 0.56 1.11
6 0.45 0.56 1.20
7 0.44 0.56 1.19
8 0.44 0.55 1.17
9 0.43 0.56 0.97
10 0.44 0.55 1.14

jscpd v4 — CopilotKit

Run Real (s) User (s) Sys (s)
1 87.45 99.76 20.15
2 79.56 97.08 16.02
3 81.66 103.22 18.62

jscpd v5 — CopilotKit

Run Real (s) User (s) Sys (s)
1 2.90 7.41 3.13
2 4.23 7.16 3.18
3 3.19 7.40 2.99

Analysis

v5 is dramatically faster across all targets

After correcting the benchmark methodology, v5 is consistently 24–37x faster than v4:

Target v4 (TypeScript) v5 (Rust) Speedup
fixtures (548 files, 1.5 MB) 1.03s 0.03s 34.3x
svelte (9K files, 38 MB) 15.80s 0.43s 36.9x
CopilotKit (17K files, 159 MB) 82.89s 3.44s 24.1x

Key observations

  1. Startup overhead: v5's native binary has near-zero startup cost. v4's Node.js runtime adds ~1s even for tiny fixtures.

  2. Scaling: v5 scales well from small to large codebases. CopilotKit (159 MB) takes only 3.4s. v4 takes 83s on the same target.

  3. CPU utilization: v5's higher user time relative to real time (e.g., CopilotKit: 7.3s user vs 3.4s real) shows effective multi-threading. v4 is single-threaded (user ≈ real).

  4. Consistency: v5 has tighter variance across all runs. On CopilotKit, v5's std dev is 0.7s (20% of mean) vs v4's 4.1s (5% of mean, but absolute variation is much larger).

  5. File scanning differences: v4 with --no-gitignore analyzes more files than v5 on svelte (11,672 vs 4,322) because v5's gitignore handling differs. This means v5 is even more efficient per-file analyzed than the raw speedup numbers suggest.

  6. Detection accuracy: v5 finds more clones on large codebases (1,055 vs 903 on svelte, 22,487 vs 12,272 on CopilotKit), likely due to different token counting and the maxSize default behavior.