LearnNewsExamplesServices
Frontmatter
id8990
titleperf: Propagate silent flag to Component Column renderer to suppress scrolling updates
stateClosed
labels
aiperformancecore
assigneestobiu
createdAtFeb 4, 2026, 8:41 PM
updatedAtFeb 4, 2026, 8:47 PM
githubUrlhttps://github.com/neomjs/neo/issues/8990
authortobiu
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 4, 2026, 8:47 PM

perf: Propagate silent flag to Component Column renderer to suppress scrolling updates

Closed v12.0.0 aiperformancecore
tobiu
tobiu commented on Feb 4, 2026, 8:41 PM

Context

The grid scrolling performance has degraded after the Neo.grid.Row refactor. Analysis points to a message flood caused by Component Columns. When grid.Body scrolls, it updates rows silently (createViewData(silent=true)). However, Neo.grid.Row fails to propagate this silent flag to cellRenderer. Consequently, grid.column.Component calls component.set() without the silent flag, triggering an individual VDOM update for every component cell in every row on every scroll frame (e.g., 50 rows = 50 extra updates/frame).

Objective

Suppress individual component updates during the scrolling loop by propagating the silent flag.

Changes

  1. src/grid/Row.mjs:
    • Update createVdom to pass silent to applyRendererOutput.
    • Update applyRendererOutput to accept silent and include it in the renderer data object.
  2. src/grid/column/Component.mjs:
    • Update cellRenderer to accept silent from data.
    • Use component.set(config, silent) to leverage component.Abstract's silent update capability.

Expected Result

Significant reduction in VDOM traffic during scrolling for grids with component columns, restoring performance.

tobiu added the performance label on Feb 4, 2026, 8:41 PM
tobiu added the core label on Feb 4, 2026, 8:41 PM
tobiu added the ai label on Feb 4, 2026, 8:41 PM
tobiu assigned to @tobiu on Feb 4, 2026, 8:41 PM
tobiu referenced in commit 258be4e - "perf: Propagate silent flag to Component Column renderer to suppress scrolling updates (#8990)" on Feb 4, 2026, 8:46 PM
tobiu
tobiu Feb 4, 2026, 8:47 PM

Input from Gemini 3 Pro:

✦ Implemented silent updates for Component Columns to fix scrolling performance regression.

Changes:

  1. src/grid/Row.mjs:
    • Updated createVdom to pass the silent flag (received from Body.createViewData) to applyRendererOutput.
    • Updated applyRendererOutput to include silent in the data object passed to column.renderer.
  2. src/grid/column/Component.mjs:
    • Updated cellRenderer to destructure silent from the data object.
    • Switched from component.set(config) to component.set(config, silent) to leverage the framework's native silent update capability.

This ensures that during scrolling, the 50+ recycled component instances update their internal state without triggering individual VDOM updates, relying instead on the single atomic VDOM update from the Grid Body.

tobiu closed this issue on Feb 4, 2026, 8:47 PM