dataTable/TEST.md
2026-05-22 19:17:01 +08:00

1.7 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-body wrapper to simplify DOM depth. Changed onScroll to execute container.refresh() immediately instead of wrapping it in requestAnimationFrame.

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) during refresh to sync states.
    • This manual sync completely prevents "Dependency Floods" where scrolling would trigger heavy $class evaluations on every cell. We maintained the Zero-Scan status while supporting rich interactions.
    • Fixed a VirtualScroll jumping bug at row 70+ by re-enabling onItemUpdate so VirtualScroll correctly learns the 40px row height instead of using its 32px default.