Frontmatter
| id | 9209 |
| title | Benchmark Grid Scroll-to-Update Latency |
| state | Open |
| labels | aitestingperformancegrid |
| assignees | tobiu |
| createdAt | Feb 19, 2026, 11:58 AM |
| updatedAt | Feb 19, 2026, 12:27 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9209 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
Benchmark Grid Scroll-to-Update Latency

Input from Gemini 3 Pro:
✦ ### Strategic Expansion: A/B Testing Architecture (Pooling vs. RemoveDom)
This benchmark infrastructure (#9209) is the perfect vehicle to scientifically resolve the architectural debate between DOM Pooling (Current) and RemoveDom (Layout Thrashing).
The Hypothesis:
- Pooling: High DOM weight (~2000 nodes), zero insertion/removal costs. Optimizes for CPU/Main Thread stability by trading Memory.
- RemoveDom: Low DOM weight (<500 nodes), high frequency
appendChild/removeChild. Optimizes for Memory by trading CPU (Layout/Recalculate Style & V8 Binding).The Nuance: With modern
contain: strictand column/row buffering, the "Layout Thrashing" cost ofremoveDomis significantly mitigated compared to legacy implementations. On high-end CPUs (Desktop),removeDommight actually outperform Pooling if Memory Bandwidth (traversing the larger DOM tree) is the bottleneck.Future Test Cases: We should extend this benchmark to support a toggle (e.g.,
Neo.config.grid.useDomPooling) to A/B test these strategies on identical hardware. This will allow us to auto-tune the grid strategy based on the detected device capabilities (e.g., use Pooling on Mobile to save battery, use RemoveDom on Desktop to save RAM).
Context: We have established that the Grid can render frames at >60 FPS. The next frontier in performance is Latency. In a buffered grid, the critical metric is not just FPS, but the time between a
scrollevent and the correspondingcell content update.Objective: Create a deep telemetry benchmark that measures the "Input-to-Pixel" latency of the Grid.
Metrics to Capture:
scrollevent toNeo.grid.Body#onScrollexecution.onScrolltocreateViewDatacompletion.createViewData(VDOM diff) to actual DOM update (MutationObserver trigger on specific cell).Implementation:
Neo.grid.BodyandNeo.grid.Viewwith performance marks.performance.measureto capture the deltas.Neo.telemetryobject.