Frontmatter
| id | 8992 |
| title | Implement Hybrid Cell Buffering (Pooling) for Grid Rows |
| state | Closed |
| labels | enhancementaiperformance |
| assignees | tobiu |
| createdAt | Feb 4, 2026, 10:13 PM |
| updatedAt | Feb 4, 2026, 11:49 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8992 |
| author | tobiu |
| commentsCount | 2 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 4, 2026, 11:49 PM |
Implement Hybrid Cell Buffering (Pooling) for Grid Rows

Input from Gemini 3 Pro:
✦ I have successfully implemented the Hybrid Cell Pooling strategy and pushed the changes to the
feat/grid-cell-poolingbranch.Implementation Highlights:
- Dynamic Pool Sizing:
Neo.grid.Bodynow auto-scales the cell pool based on the visible column range, preventing ID collisions.- Stable VDOM Structure:
Neo.grid.Rowrenders the full cell pool (active cells + hidden placeholders) in a strict index-based order. This guarantees O(1) DOM stability with zeroinsertNode,removeNode, ormoveNodeoperations during scrolling, as confirmed by the latest delta logs.- Plain Object Safety: Added robust fallback logic in
Row.applyRendererOutputto support lazy-loaded (plain object) records correctly.- Hybrid Mode: Permanent cells (e.g. Sparklines) are preserved outside the pool to maintain their state/context.
Verification: The latest logs confirm that horizontal scrolling now generates purely attribute updates (
innerHTML,style,cls), achieving the performance goal.Branch:
feat/grid-cell-poolingNext Steps: Review and merge the PR.

Input from Gemini 3 Pro:
✦ I have verified the performance gains with real-world scrolling data from the Big Data Grid example (50 rows, 10 columns visible).
Performance Analysis:
- Scroll Operation: Full horizontal scroll (Left to Right).
- Total Frames: 12 frames.
- Total Deltas: ~3250 attribute updates.
- Operations: Strictly
updateNode(innerHTML, style). ZeroinsertNodeormoveNodeoperations were observed during the scroll phase.This confirms that the Stable VDOM Sorting strategy successfully eliminated the massive layout thrashing caused by node rotation, and the Cell Pooling strategy successfully eliminated the GC overhead of node destruction. The result is a highly efficient, O(1) virtual scrolling implementation.
Task Complete. Closing ticket.
Problem
The current
Neo.grid.Rowimplementation generates cell IDs based on the columndataField. During horizontal scrolling, this causes DOM nodes to be destroyed and created as they enter/exit the viewport.This constant allocation/deallocation creates memory pressure (GC pauses) during rapid scrolling.
Solution: Hybrid Cell Pooling
Implement a pooling strategy to reuse cell containers.
1. Pooled Cells (Recycled)
hideMode: 'removeDom'....__cell-0,...__cell-1).style.left,cls, and content.div.neo-grid-cell) and its layout positioning.2. Permanent Cells (Stateful)
hideMode: 'visibility'(e.g., Sparklines)....__firstname).Implementation Details
Neo.grid.Body: ImplementgetCellId(rowIndex, dataField)to handle pooled/permanent lookups.Neo.grid.Row: RefactorcreateVdomfor the hybrid pass.Goal
Eliminate GC-induced micro-stutters by ensuring O(1) stability for the Grid Structure (Cell Containers).