Commit 06d4ba3
committed
perf: pre-declare position on table factories
Problem: the table handlers build table, tableRow, and tableCell
nodes as fresh literals, then mdast-util-from-markdown's enter() sets
node.position afterwards. V8 treats the late assignment as a shape
change, so each node walks through two hidden classes instead of one.
Core nodes already avoid this by declaring position up front;
extension nodes leave the tree with mixed layouts.
Goal: declare position on all three factory literals at construction
so V8 keeps a single hidden class per node type.
Changes:
- lib/index.js: trailing position: undefined on the table literal in
enterTable.
- lib/index.js: trailing position: undefined on the tableRow literal
in enterRow.
- lib/index.js: trailing position: undefined on the tableCell literal
in enterCell.
Notes: pairs with the matching core change in
syntax-tree/mdast-util-from-markdown#53;
merged on its own this branch is a no-op. Validated with npm test
(build, format, 100% coverage, 32 of 32 tests in dev and prod).
The branch also includes a small chore commit at lib/index.js:233
through 237 that drops three @ts-expect-error directives that no
longer match the current markdown-table types and that fail tsc on
upstream main as written. Without that cleanup the package's own test
script does not pass, so the chore commit is required to land before
this one. Squash or split per maintainer preference.
Bench (local harness, 3-run median-of-medians, GFM tokenizer and
mdast extensions stacked):
Inputs: a 4-column 1000-row table and a 20-column 100-row table.
Tables sit at low mdast-layer ratios on the baseline (1.08 and 1.09
respectively); the bottleneck for tables is in the micromark-extension-
gfm-table tokenizer, not in this util. Numbers should be read as "no
regression" rather than "credible win."
scenario baseline core alone core + paired
4 cols x 1000 rows 281.1 ms +4.7% +6.2%
20 cols x 100 rows 55.1 ms +5.0% +7.2%
The 1 to 2-point worsening from solo to paired sits inside the
machine's drift band (a separately measured drift floor of main
against itself ran at +4 to +12 percent across most GFM inputs in the
same window). The pre-declare does not regress tables; it also does
not move the needle for them, which matches what the baseline ratio
predicts.1 parent 187d4d3 commit 06d4ba3
1 file changed
Lines changed: 9 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
68 | 71 | | |
69 | 72 | | |
70 | 73 | | |
71 | 74 | | |
72 | 75 | | |
73 | 76 | | |
74 | | - | |
| 77 | + | |
| 78 | + | |
75 | 79 | | |
76 | 80 | | |
77 | 81 | | |
| |||
92 | 96 | | |
93 | 97 | | |
94 | 98 | | |
95 | | - | |
| 99 | + | |
| 100 | + | |
96 | 101 | | |
97 | 102 | | |
98 | 103 | | |
| |||
108 | 113 | | |
109 | 114 | | |
110 | 115 | | |
111 | | - | |
| 116 | + | |
| 117 | + | |
112 | 118 | | |
113 | 119 | | |
114 | 120 | | |
| |||
0 commit comments