Grid paging doesn't invalidate or recycle pages resulting in excessive memory usage when scrolling
When scrolling, the grid dynamically creates 'pages' of row data on the fly which is good. The problem is, the page creation appears to be unlimited. In other words, if i have a table with thousands of rows and scroll from top to bottom, every dynamically created page will be held in memory when I reach the bottom of the table. Since pages contain arrays of dom nodes, if I have a 'really' big table the grid uses excessive amounts of memory to hold all these pages as the user scrolls. Browser performance starts to suffer.
This can be seen in sieve by using the grid to view a store with many rows. As you scroll and each page is fetched, memory and node usage increases linearly.
A more efficient approach would be to limit the number of pages stored in memory in a lru queue or something similar. As the user scrolls, old pages no longer visible should be invalidated to free up resources for new pages that need to be loaded.
Change History (8)
Priority: |
normal →
high
|
severity: |
normal →
major
|
Owner: |
changed from Bryan Forbes to Nathan Toone
|
Resolution: |
→ fixed
|
Status: |
new →
closed
|
The issue to consider here as well is balancing the need to keep pages in memory, in case you scroll back to an already-loaded page (eliminating the need to rerender), with the need to keep the grid lightweight.