2.1 KiB
2.1 KiB
DataTable Performance Tracking
v1: Minimal Foundation
- Data: 10,000 items, 1 column.
- Scroll Test: 100 scrolls (20,000px total).
- Results:
- refreshCount: 101
- refreshTime (total): ~45.7ms
- averageRefreshTime: 0.45ms
- totalNodes: 3030 (avg 30/frame)
- Notes: Silk smooth, base VirtualScroll works perfectly.
v4: Optimized Responsiveness (Immediate Refresh)
- Data: 10,000 items, 10 columns.
- Scroll Test: 100 scrolls (20,000px total).
- Results:
- refreshCount: 101
- refreshTime (total): ~101.2ms
- averageRefreshTime: 1.01ms
- totalNodes: 3030
- Notes: Removed
.dt-bodywrapper to simplify DOM depth. ChangedonScrollto executecontainer.refresh()immediately instead of wrapping it inrequestAnimationFrame.
v6: Modularization & Manual DOM Sync (Selection)
- Data: 10,000 items, 10 columns.
- Scroll Test: 100 scrolls (20,000px total).
- Results:
- refreshCount: 100
- refreshTime (total): ~176.9ms
- averageRefreshTime: 1.76ms
- totalNodes: 4500 (avg 45/frame)
- scanCount (per frame): 0 (Maintained Zero-Scan)
- Notes:
- Added complex Area Selection, Copy/Paste, and Row Deletion.
- Successfully decoupled dynamic UI states (like
.dt-cell-selected) from the declarative binding framework. We now use manual DOM manipulation (applySelectionUI) duringrefreshto sync states. - This manual sync completely prevents "Dependency Floods" where scrolling would trigger heavy
$classevaluations on every cell. We maintained the Zero-Scan status while supporting rich interactions. - Fixed a VirtualScroll jumping bug at row 70+ by re-enabling
onItemUpdateso VirtualScroll correctly learns the 40px row height instead of using its 32px default. - Scroll Initiation Fix: Removed the
setTimeoutwrapper aroundvs.initduringreset. Previously, the first scroll often hit a "blank wall" because VirtualScroll's internal metrics hadn't finished initializing when the user made their first swift scroll motion. Synchronous initialization resolved this completely.