大数据量如何渲染
https://cdn.jsdelivr.net/gh/shengxinjing/static/virtual.webp
https://cdn.jsdelivr.net/gh/shengxinjing/static/virtual1.gif
- 减少不必要渲染
- 减少不必要的加载
虚拟列表
- 可视区的高度固定 viewHeight
- 每个列表高度height (也可能不定)
- 可视区域的数据索引start和end
- 基于startIndex计算出offset偏移
- 渲染数据 --
虚拟列表
- 总高度(只漏出可视区) = height * list.length
- start = Math.floor(scrollTop / height)
- end = start + Math.ceil(viewHeight / height)
- offset = scrollTop - (scrollTop % height);
- onScroll event
高度不确定
- 先离屏渲染 (不可见区域),获取高度后 再计算 首次渲染会卡顿
- 预估大致高度,先渲染一部分,再计算高度+缓存
todo
- 二分查找优化 (findIndex)
- 用IntersectionObserver优化scroll的性能