Latest Results
perf(signals,web): omit over a merge holds the merge record — one record per layer, one-pass owners walk for ssrElement
An omit over a merge flattened at construction: one OmitView plus one
combined hidden-key list per flattened leaf, and the next merge() copied
those entries into its arrays — on a Kobalte-shaped chain (defaults +
omit + spread, four layers) ~19 records and as many list copies per
element, the largest allocation of the render. #3487 tried to make those
copies cheaper and could not beat slice+push on instruction count; this
does not make them.
The omit now holds the MergeView record itself (new source kind
SOURCE_MERGE) and is one record whatever the merge's leaf count; a later
merge() carries it as one entry, a later omit() folds into it. Nothing on
the way is a trap: sourceKeys/sourceHas/sourceGet, descriptors,
hasStaticKeys and the tables recurse into the record by function call —
the property #3454 established (consumers read the leaves, never through
a proxy) is kept, the per-leaf copies are not.
Three things had to hold for it to pay, each found by measurement:
- one walk per read: a nested entry answers presence and value together
(MISSING sentinel), not has-then-get per level;
- a record reached through an outer view counts no reads toward its own
table threshold, and the outer view's table is collected in one pass
over the leaves (collectTable) — not one table per layer;
- sourceOwners(source, keys, owners): every key of a plain object, store
or view in merged order with its owning object, one pass. ssrElement
collects any non-plain spread (a view, a store, the array form with one
among them) this way and reads owners[i][keys[i]] — the flat form's
read cost without its construction cost. pushEntry is gone.
An omit's $SOURCES answers nothing now; consumers reach the record via
viewOf. Reads through an omit no longer count on the inner merge: the
view that was asked decides for the tree.
Measured against next (interleaved, min of N, quiet machine): tier-1
polymorphic-chain SSR −12% bytes/row, −2…−6% time across interp,
Sparkplug, Maglev, TurboFan; props-chain build −6…−65%, build+consume
−7…−31% by depth and tier; omit/merge micro-suite flat or better in
every shape; yak-bench SSR all-primitives lane +7% geomean, +20–36% on
the composition cases, which reach parity with yak's hand-rolled runtime.
Co-authored-by: Claude via Cursor <noreply@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com> perf(signals,web): omit over a merge holds the merge record — one record per layer, one-pass owners walk for ssrElement
An omit over a merge flattened at construction: one OmitView plus one
combined hidden-key list per flattened leaf, and the next merge() copied
those entries into its arrays — on a Kobalte-shaped chain (defaults +
omit + spread, four layers) ~19 records and as many list copies per
element, the largest allocation of the render. #3487 tried to make those
copies cheaper and could not beat slice+push on instruction count; this
does not make them.
The omit now holds the MergeView record itself (new source kind
SOURCE_MERGE) and is one record whatever the merge's leaf count; a later
merge() carries it as one entry, a later omit() folds into it. Nothing on
the way is a trap: sourceKeys/sourceHas/sourceGet, descriptors,
hasStaticKeys and the tables recurse into the record by function call —
the property #3454 established (consumers read the leaves, never through
a proxy) is kept, the per-leaf copies are not.
Three things had to hold for it to pay, each found by measurement:
- one walk per read: a nested entry answers presence and value together
(MISSING sentinel), not has-then-get per level;
- a record reached through an outer view counts no reads toward its own
table threshold, and the outer view's table is collected in one pass
over the leaves (collectTable) — not one table per layer;
- sourceOwners(source, keys, owners): every key of a plain object, store
or view in merged order with its owning object, one pass. ssrElement
collects any non-plain spread (a view, a store, the array form with one
among them) this way and reads owners[i][keys[i]] — the flat form's
read cost without its construction cost. pushEntry is gone.
An omit's $SOURCES answers nothing now; consumers reach the record via
viewOf. Reads through an omit no longer count on the inner merge: the
view that was asked decides for the tree.
Measured against next (interleaved, min of N, quiet machine): tier-1
polymorphic-chain SSR −12% bytes/row, −2…−6% time across interp,
Sparkplug, Maglev, TurboFan; props-chain build −6…−65%, build+consume
−7…−31% by depth and tier; omit/merge micro-suite flat or better in
every shape; yak-bench SSR all-primitives lane +7% geomean, +20–36% on
the composition cases, which reach parity with yak's hand-rolled runtime.
Co-authored-by: Claude via Cursor <noreply@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com> Latest Branches
-3%
+17%
-21%
Monkeylordz:codex/fix-shallow-store-hydration © 2026 CodSpeed Technology