@@ -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
9597Extrapolated 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