Frontmatter
| id | 9304 |
| title | Fix: Enforce static state bindings for pooled Component columns (Memory Leak) |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Feb 25, 2026, 7:29 PM |
| updatedAt | Feb 25, 2026, 7:30 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9304 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 25, 2026, 7:30 PM |
Fix: Enforce static state bindings for pooled Component columns (Memory Leak)

tobiu
Feb 25, 2026, 7:29 PM
Input from Gemini 3.1 Pro:
✦ I have successfully enforced static state bindings for pooled Component columns in
src/grid/column/Component.mjs.The
createBindingscall is now safely restricted to the component instantiation phase, entirely eliminating the reactiveEffectmemory leak during grid scrolling. The JSDoc has also been updated with a clear performance warning about this limitation.I've committed and pushed the changes. Marking this issue as resolved!
tobiu assigned to @tobiu on Feb 25, 2026, 7:30 PM
tobiu closed this issue on Feb 25, 2026, 7:30 PM
When using
Neo.grid.column.ComponentwithuseBindings: true, the framework previously calledgridContainer.body.getStateProvider()?.createBindings(component)every time a cell was rendered.Because
Neo.grid.Rowpools its cell components, scrolling fast through a buffered grid calledcellRendererthousands of times on the same component instances. This causedNeo.state.Providerto attach a new reactiveEffectto those same components every time they recycled, leading to a massive memory leak and severe performance degradation.This fix:
createBindingscall to only execute ONCE when the pooled component is first instantiated.componentConfig.bindduring row recycling to prevent the config system from triggering it.themeoranimateVisuals), never for dynamically iterating record data.