Vue优化之长列表渲染性能优化
2024-01-29 00:45:30
作为一名前端页面仔,经常会需要运用长列表去展示大量数据,虽然说已经用了分页展示,但是极端情况下页面足够多的时候数据就会特别多然后出现卡顿等性能问题。
当然有的人觉得自己平时要处理的数据没那么多,可能碰到很多行的列表概率很低,那么他就可以忽略这部分优化,因为没必要。
对于我们这种动不动就展示数万行数据的业务场景,就不得不面对这种问题了。
性能问题剖析
在实际应用场景中,我们会碰到这种问题:比如我们有一个列表,其中包含一万行数据,现在要展示出来。
最开始我们是全部数据一股脑的都展示出来了,然后发现卡的一批,接着调整显示为1000行为一页,然后分页,但是有新的问题出现了:
- 分页之后,如果要展示第二页内容,需要先加载数据,再展示,对于1000行数据这种可能无所谓,但是对于10万、100万、1000万行数据来说,加载的过程是非常慢的,体验极差。
- 由于页面进行了分页,我们如果要获取第100页的数据,就需要先加载前99页的数据,这无疑是巨大的资源浪费。
- 可能有人会说,数据不是应该后端分页了吗,为什么还要前端分页?首先,后端分页对于数据量极大的场景来说,会产生巨大的性能开销,后端需要对数据进行汇总、分页、返回,这个过程耗时比较长,体验极差。其次,对于富客户端来说,我们没必要局限于后端分页这种方式,我们可以通过前端分页的方式来优化性能。
如果不想采取分页的方式,那么我们可能需要用虚拟列表、无限滚动等技术去优化性能。
优化方案
虚拟列表
虚拟列表是一种将大量数据渲染到页面上的技术,它只渲染当前可见的数据,其他的数据则隐藏起来。当用户滚动列表时,虚拟列表会自动加载并渲染新的数据。
虚拟列表的优点是:
- 性能高:虚拟列表只渲染当前可见的数据,因此它可以显著提高渲染性能。
- 内存占用少:虚拟列表只在内存中存储当前可见的数据,因此它可以减少内存占用。
- 滚动平滑:虚拟列表可以实现平滑滚动,不会出现卡顿现象。
虚拟列表的缺点是:
- 实现复杂:虚拟列表的实现相对复杂,需要对Vue的渲染机制有一定的了解。
- 兼容性差:虚拟列表对浏览器的兼容性要求较高,在一些老旧的浏览器中可能无法正常工作。
无限滚动
无限滚动是一种当用户滚动到列表底部时自动加载更多数据的技术。无限滚动可以消除分页的缺点,并提供更好的用户体验。
无限滚动的优点是:
- 用户体验好:无限滚动可以提供无缝的滚动体验,用户无需手动加载更多数据。
- 性能高:无限滚动只加载当前可见的数据,因此它可以提高渲染性能。
无限滚动的缺点是:
- 内存占用高:无限滚动需要在内存中存储所有加载的数据,因此它可能会导致内存占用过高。
- 滚动平滑:无限滚动可能导致滚动不平滑,尤其是在数据量大的情况下。
数据预加载
数据预加载是一种在用户滚动列表之前预先加载数据的技术。数据预加载可以减少用户等待的时间,并提高用户体验。
数据预加载的优点是:
- 用户体验好:数据预加载可以减少用户等待的时间,并提供更好的用户体验。
- 性能高:数据预加载可以提高渲染性能,因为数据已经预先加载好了。
数据预加载的缺点是:
- 内存占用高:数据预加载需要在内存中存储所有预加载的数据,因此它可能会导致内存占用过高。
- 浪费带宽:数据预加载可能会浪费带宽,因为预加载的数据可能永远不会被使用。
截流节流
截流和节流都是用于控制函数执行频率的技术。截流规定在一个时间段内只能执行一次函数,而节流规定函数在一段时间内只能执行一次。
截流和节流可以用来优化列表的滚动性能。例如,我们可以使用节流来控制列表的滚动事件,这样可以减少函数的执行频率,并提高性能。
滚动平滑
滚动平滑是一种使列表滚动更加平滑的技术。滚动平滑可以减少卡顿现象,并提供更好的用户体验。
滚动平滑的优点是:
- 用户体验好:滚动平滑可以减少卡顿现象,并提供更好的用户体验。
- 性能高:滚动平滑可以提高渲染性能,因为滚动过程更加平滑。
滚动平滑的缺点是:
- 实现复杂:滚动平滑的实现相对复杂,需要对Vue的渲染机制有一定的了解。
- 兼容性差:滚动平滑对浏览器的兼容性要求较高,在一些老旧的浏览器中可能无法正常工作。
总结
在本文中,我们介绍了如何优化Vue中的长列表渲染性能,包括使用虚拟列表、无限滚动、数据预加载、截流节流和滚动平滑等技术。
这些技术可以帮助我们提高长列表的滚动性能和用户体验。在实际项目中,我们可以根据具体情况选择合适的技术来优化长列表的渲染性能。