• 尽可能少的渲染 DOM,只渲染可视区范围内的DOM,解决大量DOM的重绘和回流
    • 滚动出去的 DOM也会重绘和回流,影响性能
    • 不在可视区的 DOM直接销毁
  • 不用全部加载出所有的DOM节点。默认只渲染可视区域及可视区域外的一个节点
  • 用于处理大型数据列表。当使用在大型数据列表中,可避免因为数据的更新而导致大量的重新渲染

无限滚动,X轴,横向

  • 纵向虚拟滚动,Y轴,纵向
  • 既然只能在同一时刻看到4个节点,为什么不能只创建4个节点,剩下的节点都是通过滚动要展现的时候,才去创建呢?
  • 虚拟滚动,就是出于这个目的来设计的

无限滚动应用场景

  • 移动端的瀑布流
  • PC端商品列表的,无限下拉刷新
  • 刷不到底的新闻feed流
  • 无尽图片瀑布流
  • 编辑窗口加载卡顿等

table & div模拟

  • 采用原生table,还是用div来模拟
  • 对于树形表格,采取怎样的虚拟滚动方案?
  • 组件的职责边界怎么界定?

table布局有浏览器的特定算法实现加速绘制,且对静态表格来说,页面结构是很稳定的

  • 表格左右列固定,中间列可滚动
  • 要多用两个table定位来辅助,一个在左,一个在右
  • 三兄弟之间,还要时不时保持联络,确保大家每行高度都是一样的。

div模拟表格,绘制的速度也不慢,要做许多额外的维护工作

缓存优化

缓存节点,diff计算每次滚动时要改变的节点等