Frontmatter
| id | 9115 |
| title | Optimize Store Streaming and Progressive Loading |
| state | Closed |
| labels | performancecore |
| assignees | tobiu |
| createdAt | Feb 12, 2026, 7:18 PM |
| updatedAt | Feb 12, 2026, 7:21 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9115 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 12, 2026, 7:21 PM |
Optimize Store Streaming and Progressive Loading
tobiu assigned to @tobiu on Feb 12, 2026, 7:19 PM

tobiu
Feb 12, 2026, 7:21 PM
Input from Gemini 3 Pro:
✦ I have completed the optimizations for store streaming and progressive loading.
Changes:
- Eliminated Duplicate Load Events: Removed the manual
fire('load')call inNeo.data.Store.onData. The store now relies on themutateevent (triggered byadd()) to fireloadevents viaonCollectionMutate, preventing double-firing for every data chunk.- Unblocked UI during Streaming: Added
await me.timeout(5)to theNeo.data.proxy.Streamread loop. This yields control to the App Worker's event loop, allowing VDOM updates and other events to be processed during large stream parsing.- Tracked Streaming State: Introduced
isStreaminglogic inNeo.data.Store.loadand updatedonCollectionMutateto include anisLoadingflag in the load event based on this state.- Base Proxy Enhancement: Added the
storeconfig toNeo.data.proxy.Baseto ensure proxies have direct access to their owner store.These changes ensure that the DevIndex grid renders smoothly and progressively as data streams in, without freezing the UI.
tobiu closed this issue on Feb 12, 2026, 7:21 PM
Refactor
Neo.data.StoreandNeo.data.proxy.Streamto optimize progressive loading and prevent UI blocking.Key Changes:
loadevent firing inStore.onData. Rely ononCollectionMutateto triggerloadevents naturally when data is added, preventing double-firing for every chunk.await me.timeout(5)in theStreamproxy's read loop. This yields control to the App Worker's event loop, allowing it to process VDOM updates and other events while parsing a large stream.isStreamingflag on the Store (managed via the Proxy) to distinguish between intermediate progressive updates and the final load completion.storeconfig toNeo.data.proxy.Baseto give proxies direct access to their owner store.Goal: Ensure smooth, progressive rendering for large datasets (e.g., DevIndex) without freezing the UI.