Skip to content

Commit 65864dc

Browse files
docs: update build performance benchmarks (3.9.1) (#880)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: carlos-alm <127798846+carlos-alm@users.noreply.github.com>
1 parent 1eb9304 commit 65864dc

2 files changed

Lines changed: 191 additions & 40 deletions

File tree

README.md

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -588,21 +588,19 @@ Codegraph also extracts symbols from common callback patterns: Commander `.comma
588588

589589
Self-measured on every release via CI ([build benchmarks](generated/benchmarks/BUILD-BENCHMARKS.md) | [embedding benchmarks](generated/benchmarks/EMBEDDING-BENCHMARKS.md) | [query benchmarks](generated/benchmarks/QUERY-BENCHMARKS.md) | [incremental benchmarks](generated/benchmarks/INCREMENTAL-BENCHMARKS.md) | [resolution precision/recall](tests/benchmarks/resolution/)):
590590

591-
*Last updated: v3.9.0 (2026-04-04)*
591+
*Last updated: v3.9.1 (2026-04-06)*
592592

593-
| Metric | Latest |
594-
|---|---|
595-
| Build speed (native) | **12.8 ms/file** |
596-
| Build speed (WASM) | **13.1 ms/file** |
597-
| Query time (native) | **30ms** |
598-
| Query time (WASM) | **31ms** |
599-
| No-op rebuild (native) | **8ms** |
600-
| 1-file rebuild (native) | **562ms** |
601-
| Query: fn-deps | **2.1ms** |
602-
| Query: path | **2.2ms** |
603-
| ~50,000 files (est.) | **~640.0s build** |
604-
| Resolution precision | **100.0%** |
605-
| Resolution recall | **64.5%** |
593+
| Metric | Native | WASM |
594+
|---|---|---|
595+
| Build speed | **10.2 ms/file** | **13.7 ms/file** |
596+
| Query time | **23ms** | **36ms** |
597+
| No-op rebuild | **17ms** | **15ms** |
598+
| 1-file rebuild | **767ms** | **639ms** |
599+
| Query: fn-deps | **2.2ms** | **2.2ms** |
600+
| Query: path | **2.2ms** | **2.2ms** |
601+
| ~50,000 files (est.) | **~510.0s build** | **~685.0s build** |
602+
| Resolution precision | **100.0%** ||
603+
| Resolution recall | **71.1%** ||
606604

607605
Metrics are normalized per file for cross-version comparability. Times above are for a full initial build — incremental rebuilds only re-parse changed files.
608606

generated/benchmarks/BUILD-BENCHMARKS.md

Lines changed: 179 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Metrics are normalized per file for cross-version comparability.
55

66
| Version | Engine | Date | Files | Build (ms/file) | Query (ms) | Nodes/file | Edges/file | DB (bytes/file) |
77
|---------|--------|------|------:|----------------:|-----------:|-----------:|-----------:|----------------:|
8+
| 3.9.1 | native | 2026-04-06 | 570 | 10.2 ↓20% | 23.4 ↓23% | 28.1 ↑3% | 56.9 ↑5% | 48433 ↑8% |
9+
| 3.9.1 | wasm | 2026-04-06 | 570 | 13.7 ↑5% | 35.6 ↑16% | 28.1 ↑3% | 56.9 ↑5% | 45717 ↑2% |
810
| 3.9.0 | native | 2026-04-04 | 567 | 12.8 ↓4% | 30.4 ↑5% | 27.3 ~ | 54 ↑14% | 44666 ↑2% |
911
| 3.9.0 | wasm | 2026-04-04 | 567 | 13.1 ↓4% | 30.6 ↓4% | 27.3 ~ | 54 ~ | 44623 ↑5% |
1012
| 3.8.1 | native | 2026-04-03 | 565 | 13.3 ↑533% | 28.9 ↑113% | 27 ↑4% | 47.5 ↑5% | 43693 ↑42% |
@@ -57,54 +59,56 @@ Metrics are normalized per file for cross-version comparability.
5759

5860
| Metric | Value |
5961
|--------|-------|
60-
| Build time | 7.3s |
61-
| Query time | 30ms |
62-
| Nodes | 15,483 |
63-
| Edges | 30,609 |
64-
| DB size | 24.2 MB |
65-
| Files | 567 |
62+
| Build time | 5.8s |
63+
| Query time | 23ms |
64+
| Nodes | 16,031 |
65+
| Edges | 32,445 |
66+
| DB size | 26.3 MB |
67+
| Files | 570 |
6668

6769
#### WASM
6870

6971
| Metric | Value |
7072
|--------|-------|
71-
| Build time | 7.5s |
72-
| Query time | 31ms |
73-
| Nodes | 15,483 |
74-
| Edges | 30,610 |
75-
| DB size | 24.1 MB |
76-
| Files | 567 |
73+
| Build time | 7.8s |
74+
| Query time | 36ms |
75+
| Nodes | 16,031 |
76+
| Edges | 32,445 |
77+
| DB size | 24.9 MB |
78+
| Files | 570 |
7779

7880
### Build Phase Breakdown (latest)
7981

8082
| Phase | Native (build) | WASM (build) | Native (1-file) | WASM (1-file) |
8183
|-------|---------------:|-------------:|----------------:|--------------:|
82-
| Parse | 572.6 ms | 3079.6 ms | 50.2 ms | 258.2 ms |
83-
| Insert nodes | 327.4 ms | 336.9 ms | 25.8 ms | 19.3 ms |
84-
| Resolve imports | 3.6 ms | 19.6 ms | 0.9 ms | 1.8 ms |
85-
| Build edges | 168.6 ms | 211 ms | 26.2 ms | 26.9 ms |
86-
| Structure | 54.1 ms | 54.9 ms | 151.7 ms | 28.3 ms |
87-
| Roles | 67.2 ms | 73.2 ms | 65.6 ms | 53.7 ms |
88-
| AST nodes | 246.1 ms | 240 ms | 20.4 ms | 0.6 ms |
89-
| Complexity | 399.7 ms | 420.1 ms | 4.8 ms | 0.7 ms |
90-
| CFG | 541.8 ms | 496.1 ms | 27.7 ms | 0.4 ms |
91-
| Dataflow | 296 ms | 195.9 ms | 15.3 ms | 0.5 ms |
84+
| Parse | 3382.4 ms | 3103.6 ms | 338.9 ms | 272.6 ms |
85+
| Insert nodes | 406.8 ms | 346.4 ms | 49 ms | 20.8 ms |
86+
| Resolve imports | 14.1 ms | 15.8 ms | 2.2 ms | 1.9 ms |
87+
| Build edges | 234.5 ms | 218.1 ms | 49.8 ms | 31.5 ms |
88+
| Structure | 49.6 ms | 62.3 ms | 28.7 ms | 31.6 ms |
89+
| Roles | 86.8 ms | 84.9 ms | 80.7 ms | 83.1 ms |
90+
| AST nodes | 283.3 ms | 730.3 ms | 11.9 ms | 1.4 ms |
91+
| Complexity | 61.7 ms | 1077.6 ms | 0.3 ms | 0.7 ms |
92+
| CFG | 309.7 ms | 1076.7 ms | 0.7 ms | 0.4 ms |
93+
| Dataflow | 904 ms | 834.7 ms | 0.3 ms | 0.6 ms |
9294

9395
### Estimated performance at 50,000 files
9496

9597
Extrapolated linearly from per-file metrics above.
9698

9799
| Metric | Native (Rust) | WASM |
98100
|--------|---:|---:|
99-
| Build time | 640.0s | 655.0s |
100-
| DB size | 2129.8 MB | 2127.8 MB |
101-
| Nodes | 1,365,000 | 1,365,000 |
102-
| Edges | 2,700,000 | 2,700,000 |
101+
| Build time | 510.0s | 685.0s |
102+
| DB size | 2309.5 MB | 2180.0 MB |
103+
| Nodes | 1,405,000 | 1,405,000 |
104+
| Edges | 2,845,000 | 2,845,000 |
103105

104106
### Incremental Rebuilds
105107

106108
| Version | Engine | No-op (ms) | 1-file (ms) |
107109
|---------|--------|----------:|-----------:|
110+
| 3.9.1 | native | 17 ↑113% | 767 ↑36% |
111+
| 3.9.1 | wasm | 15 ~ | 639 ↑14% |
108112
| 3.9.0 | native | 8 ~ | 562 ↑1238% |
109113
| 3.9.0 | wasm | 15 ↓6% | 559 ↓7% |
110114
| 3.8.1 | native | 8 ~ | 42 ↑27% |
@@ -149,6 +153,8 @@ Extrapolated linearly from per-file metrics above.
149153

150154
| Version | Engine | fn-deps (ms) | fn-impact (ms) | path (ms) | roles (ms) |
151155
|---------|--------|------------:|--------------:|----------:|----------:|
156+
| 3.9.1 | native | 2.2 ↑5% | 2.3 ↑5% | 2.2 ~ | 25.5 ~ |
157+
| 3.9.1 | wasm | 2.2 ↑5% | 2.2 ~ | 2.2 ↑5% | 26.3 ~ |
152158
| 3.9.0 | native | 2.1 ↓5% | 2.2 ~ | 2.2 ~ | 25.9 ↓13% |
153159
| 3.9.0 | wasm | 2.1 ↓5% | 2.2 ~ | 2.1 ↓5% | 26.6 ↓6% |
154160
| 3.8.1 | native | 2.2 ↓12% | 2.2 ~ | 2.2 ↑5% | 29.7 ~ |
@@ -246,6 +252,153 @@ pre-parse that previously added ~388ms on native builds.
246252

247253
<!-- BENCHMARK_DATA
248254
[
255+
{
256+
"version": "3.9.1",
257+
"date": "2026-04-06",
258+
"files": 570,
259+
"wasm": {
260+
"buildTimeMs": 7793,
261+
"queryTimeMs": 35.6,
262+
"nodes": 16031,
263+
"edges": 32445,
264+
"dbSizeBytes": 26058752,
265+
"perFile": {
266+
"buildTimeMs": 13.7,
267+
"nodes": 28.1,
268+
"edges": 56.9,
269+
"dbSizeBytes": 45717
270+
},
271+
"noopRebuildMs": 15,
272+
"oneFileRebuildMs": 639,
273+
"oneFilePhases": {
274+
"setupMs": 1.1,
275+
"parseMs": 272.6,
276+
"insertMs": 20.8,
277+
"resolveMs": 1.9,
278+
"edgesMs": 31.5,
279+
"structureMs": 31.6,
280+
"rolesMs": 83.1,
281+
"astMs": 1.4,
282+
"complexityMs": 0.7,
283+
"cfgMs": 0.4,
284+
"dataflowMs": 0.6,
285+
"finalizeMs": 5.2
286+
},
287+
"queries": {
288+
"fnDepsMs": 2.2,
289+
"fnImpactMs": 2.2,
290+
"pathMs": 2.2,
291+
"rolesMs": 26.3
292+
},
293+
"phases": {
294+
"setupMs": 86.6,
295+
"parseMs": 3103.6,
296+
"insertMs": 346.4,
297+
"resolveMs": 15.8,
298+
"edgesMs": 218.1,
299+
"structureMs": 62.3,
300+
"rolesMs": 84.9,
301+
"astMs": 730.3,
302+
"complexityMs": 1077.6,
303+
"cfgMs": 1076.7,
304+
"dataflowMs": 834.7,
305+
"finalizeMs": 52.2
306+
}
307+
},
308+
"native": {
309+
"buildTimeMs": 5819,
310+
"queryTimeMs": 23.4,
311+
"nodes": 16031,
312+
"edges": 32445,
313+
"dbSizeBytes": 27607040,
314+
"perFile": {
315+
"buildTimeMs": 10.2,
316+
"nodes": 28.1,
317+
"edges": 56.9,
318+
"dbSizeBytes": 48433
319+
},
320+
"noopRebuildMs": 17,
321+
"oneFileRebuildMs": 767,
322+
"oneFilePhases": {
323+
"setupMs": 3.2,
324+
"parseMs": 338.9,
325+
"insertMs": 49,
326+
"resolveMs": 2.2,
327+
"edgesMs": 49.8,
328+
"structureMs": 28.7,
329+
"rolesMs": 80.7,
330+
"astMs": 11.9,
331+
"complexityMs": 0.3,
332+
"cfgMs": 0.7,
333+
"dataflowMs": 0.3,
334+
"finalizeMs": 0.9
335+
},
336+
"queries": {
337+
"fnDepsMs": 2.2,
338+
"fnImpactMs": 2.3,
339+
"pathMs": 2.2,
340+
"rolesMs": 25.5
341+
},
342+
"phases": {
343+
"setupMs": 25.6,
344+
"parseMs": 3382.4,
345+
"insertMs": 406.8,
346+
"resolveMs": 14.1,
347+
"edgesMs": 234.5,
348+
"structureMs": 49.6,
349+
"rolesMs": 86.8,
350+
"astMs": 283.3,
351+
"complexityMs": 61.7,
352+
"cfgMs": 309.7,
353+
"dataflowMs": 904,
354+
"finalizeMs": 5.6
355+
}
356+
},
357+
"resolution": {
358+
"javascript": {
359+
"precision": 1,
360+
"recall": 0.667,
361+
"truePositives": 12,
362+
"falsePositives": 0,
363+
"falseNegatives": 6,
364+
"totalResolved": 12,
365+
"totalExpected": 18,
366+
"byMode": {
367+
"static": {
368+
"expected": 12,
369+
"resolved": 9,
370+
"recall": 0.75
371+
},
372+
"receiver-typed": {
373+
"expected": 6,
374+
"resolved": 3,
375+
"recall": 0.5
376+
}
377+
}
378+
},
379+
"typescript": {
380+
"precision": 1,
381+
"recall": 0.75,
382+
"truePositives": 15,
383+
"falsePositives": 0,
384+
"falseNegatives": 5,
385+
"totalResolved": 15,
386+
"totalExpected": 20,
387+
"byMode": {
388+
"static": {
389+
"expected": 9,
390+
"resolved": 9,
391+
"recall": 1
392+
},
393+
"receiver-typed": {
394+
"expected": 11,
395+
"resolved": 6,
396+
"recall": 0.5454545454545454
397+
}
398+
}
399+
}
400+
}
401+
},
249402
{
250403
"version": "3.9.0",
251404
"date": "2026-04-04",

0 commit comments

Comments
 (0)