Skip to content

Commit bf3eeaa

Browse files
committed
docs(release-notes): Enhance delta log proof with component column granularity (#9341)
1 parent 2497955 commit bf3eeaa

1 file changed

Lines changed: 53 additions & 2 deletions

File tree

resources/content/release-notes/v12.0.0.md

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,59 @@ flowchart TD
155155
* **Resilient Lifecycle:** Component columns (like our Living Sparklines) are now standard children of the `Row` component. Because the row itself is never destroyed, the framework's standard lifecycle manages cell components automatically, permanently eliminating the dreaded "Zombie Canvas" bugs.
156156

157157
2. **The "Fixed-DOM-Order" Strategy (Main Thread):**
158-
* We upgraded `Neo.grid.Body` to enforce strict **Row Pooling**. As you scroll, rows leaving the top of the viewport are recycled in place via CSS `translate3d`.
159-
* *The Flex:* When you scroll the 50,000-record DevIndex grid, there are **ZERO structural DOM mutations** (`insertBefore`, `removeChild`, `moveNode`). There can be 600 deltas in a single tick, but they are exclusively fast CSS transforms and `textContent` updates. The DOM order never changes, effectively eliminating layout recalculations.
158+
* We upgraded `Neo.grid.Body` to enforce strict **Row Pooling**. As you scroll, rows leaving the top of the viewport are recycled in place via hardware-accelerated CSS `translate3d`.
159+
* *The Flex (Empirical Proof):* During maximum-velocity vertical scrolling stress tests on the 50k-record DevIndex, we analyzed the exact composition of the VDOM delta payloads crossing the worker bridge.
160+
161+
```mermaid
162+
graph TD
163+
subgraph Mounted Row Range (DOM Pool)
164+
TopBoundary[--- Top of Viewport ---]
165+
R1[DOM Row 1: translate3d(0, 0px, 0)]
166+
R2[DOM Row 2: translate3d(0, 50px, 0)]
167+
R3[DOM Row 3: translate3d(0, 100px, 0)]
168+
BottomBoundary[--- Bottom of Viewport ---]
169+
end
170+
171+
Scroll[User Scrolls Down] -->|Moves DOM out of bounds| R1
172+
R1 -.->|Teleported to Bottom via GPU| R3
173+
174+
style R1 stroke:#f66,stroke-width:2px,stroke-dasharray: 5 5
175+
```
176+
177+
* A peak scrolling frame generated **784 deltas**. The payload contained exactly:
178+
* **0 `insertNode` commands.**
179+
* **0 `removeNode` commands.**
180+
* **784 `updateNode` commands.**
181+
* This is the definition of a perfectly functioning **DOM Pool**.
182+
183+
```javascript readonly
184+
// Empirical Delta Log (The "Zero-Mutation" Proof)
185+
// Notice the complete absence of HTML string replacements or structural changes.
186+
[
187+
// 1. The Container moves via GPU
188+
{
189+
"id": "neo-grid-body-1__row-1",
190+
"attributes": { "aria-rowindex": "87", "data-record-id": "neo-record-50839", "data-row-id": 85 },
191+
"style": { "transform": "translate3d(0px, 4250px, 0px)" }
192+
},
193+
// 2. A simple text cell updates
194+
{
195+
"id": "neo-grid-body-1__row-1__cell-0",
196+
"innerHTML": "86",
197+
"attributes": { "data-record-id": "..." }
198+
},
199+
// ...
200+
// 3. Ultra-granular deltas INSIDE a Component-Based Column (e.g. the 'Impact' Heuristics column)
201+
{
202+
"id": "neo-vnode-353",
203+
"textContent": "🏛️",
204+
"cls": { "add": ["pillar"], "remove": ["bolt"] },
205+
"attributes": { "title": "Consistency: Community Pillar (>10y)" }
206+
}
207+
]
208+
```
209+
* We intentionally trade cheap JavaScript cycles (calculating and serializing 800 JSON objects takes **< 3ms**) to completely eliminate Native DOM Layout Thrashing. Even deep inside complex, nested component columns (like the DevIndex "Impact" badges), the framework resolves changes down to microscopic CSS class toggles (`add`/`remove`) and `textContent` updates.
210+
* By using `translate3d` specifically, we force the browser to hand the positioning off to the GPU. Because the strict "mounted row range" limits the total number of DOM nodes, we achieve **Compositor Heaven**: we leverage GPU hardware acceleration without triggering a "layer explosion" that would overwhelm video memory. The browser never recalculates the layout tree because the DOM structure never changes.
160211

161212
3. **"Full Pool Rendering" for Cells (O(1) Horizontal Scroll):**
162213
* We extended the zero-mutation philosophy to horizontal scrolling. Each row implements a "Full Pool Rendering" strategy, generating a fixed-size array of cell nodes based on the `gridBody.cellPoolSize`.

0 commit comments

Comments
 (0)