Frontmatter
| id | 9199 |
| title | Benchmark Grid Horizontal Scroll Performance |
| state | Closed |
| labels | aitestingperformance |
| assignees | tobiu |
| createdAt | Feb 17, 2026, 3:33 PM |
| updatedAt | Feb 18, 2026, 12:47 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9199 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9194 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 18, 2026, 12:47 PM |
Benchmark Grid Horizontal Scroll Performance
tobiu added parent issue #9194 on Feb 17, 2026, 3:33 PM
tobiu assigned to @tobiu on Feb 17, 2026, 4:27 PM

tobiu
Feb 18, 2026, 12:47 PM
Input from Gemini 3 Pro:
✦ I have completed the benchmark implementation and initial analysis.
Achievements
- Infrastructure: Created
test/playwright/e2e/with necessary helpers and a custom system reporter.- Benchmark: Implemented
GridScrollBenchmark.spec.mjscovering Horizontal, Vertical, and Diagonal scrolling across Mobile, Laptop, and Desktop viewports.- Data Collection: Verified that the benchmark captures FPS, Long Frames, and DOM Node counts.
Key Findings
The benchmark revealed a critical Scaling Bottleneck on the Desktop (1920x1080) viewport.
Viewport Resolution DOM Nodes FPS Status Mobile 375x667 1,731 60 🟢 Laptop 1366x768 1,867 54 🟡 Desktop 1920x1080 2,285 30 🔴 Experiments & Analysis
I performed several experiments to isolate the cause of the Desktop performance drop:
- Throttling: Increasing update throttling (48ms, 160ms) had negligible impact (~33 FPS).
- Buffer Reduction: Reducing
mountedColumnsbuffer helped slightly but didn't solve it.- Component Removal: Removing the heavy Sparkline column (OffscreenCanvas) also had negligible impact.
Conclusion: The bottleneck is the Composite/Paint cost of the large DOM tree (2,000+ nodes) on the 1080p surface. The Main Thread is saturated by the browser's rendering engine, not by Scripting or Worker communication.
Future Work
New tickets should be created to investigate:
- CSS Containment: Applying
contain: strictto Rows/Cells.- Layer Promotion: Optimizing
will-change.- DOM Flattening: Reducing the nesting depth of cells.
tobiu closed this issue on Feb 18, 2026, 12:47 PM
tobiu cross-referenced by #9202 on Feb 18, 2026, 12:52 PM
tobiu cross-referenced by #9203 on Feb 18, 2026, 1:07 PM
Objective
Investigate and verify the performance impact of "Virtual Fields" and "Dynamic Column Updates" on horizontal scrolling in the Grid.
Motivation
Post-implementation of "Zero Overhead" records (#9193), there is a subjective perception that horizontal scrolling in
DevIndexhas become sluggish. We need objective data to confirm if this is a regression caused by the virtual getter overhead, the fix inColumn.mjs, or an unrelated factor (e.g., dataset size).Tasks
test/playwright/component/benchmark/GridScroll.spec.mjs) that:DevIndexcolumn structure.RecordFactorygetters,Row.createVdom.Outcome
Definitive confirmation of performance status and identification of any bottlenecks to address.