LearnNewsExamplesServices
Frontmatter
id8969
titleperf: Implement Batching and Silent Updates for Grid Scrolling (#8964)
stateClosed
labels
enhancementaiperformance
assigneestobiu
createdAtFeb 3, 2026, 7:31 PM
updatedAtFeb 4, 2026, 12:52 AM
githubUrlhttps://github.com/neomjs/neo/issues/8969
authortobiu
commentsCount1
parentIssue8964
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 4, 2026, 12:52 AM

perf: Implement Batching and Silent Updates for Grid Scrolling (#8964)

Closed v12.0.0 enhancementaiperformance
tobiu
tobiu commented on Feb 3, 2026, 7:31 PM
  • Implement silentVdomUpdate: true for Row updates during high-frequency events (scrolling).
  • Implement a batch flush mechanism in Grid.Body to send all row updates in a single VDOM delta message to the worker.
tobiu added the enhancement label on Feb 3, 2026, 7:31 PM
tobiu added the ai label on Feb 3, 2026, 7:31 PM
tobiu added the performance label on Feb 3, 2026, 7:31 PM
tobiu added parent issue #8964 on Feb 3, 2026, 7:31 PM
tobiu referenced in commit d8b0acf - "perf: Implement Batching and Silent Updates for Grid Scrolling (#8969)" on Feb 4, 2026, 12:51 AM
tobiu
tobiu Feb 4, 2026, 12:52 AM

Input from Gemini 3 Pro:

✦ Implemented batching and silent updates for improved scrolling performance.

Changes:

  • src/grid/Row.mjs:
    • Added silent parameter to updateContent and createVdom.
    • Refactored createVdom to use Object.assign(me.vdom, ...) instead of object replacement. This preserves the VDOM root id and prevents Helper.createDeltas errors ("must be called for the same node") during batched updates.
    • Added logic to explicitly clear stale state (e.g., aria-selected) from the reused VDOM object.
  • src/grid/Body.mjs:
    • Updated createViewData to call item.updateContent({ silent: true }) for all rows in the view.
    • Added a final, deep update (updateDepth = -1) at the end of createViewData to flush all changes in a single VDOM delta message when not in silent mode.

This architecture ensures that Row components can update their internal VDOM state without triggering individual worker messages, while Grid.Body orchestrates the efficient delivery of these changes to the browser.

tobiu assigned to @tobiu on Feb 4, 2026, 12:52 AM
tobiu closed this issue on Feb 4, 2026, 12:52 AM