vue 之长列表优化
今天主要想跟大家聊聊长列表优化
,有的时候我们需要在页面上显示特别长的列表,这种情况主要发生在移动端或者后台管理的页面中,在移动端往往有个下拉刷新内容的功能,不停地往上翻,到底后会加载更多内容,这样会导致列表中会有很多元素,从而导致页面的卡顿,由于元素多了以后,浏览器渲染也需要时间,特别是新增了一些元素,也会触发浏览器的重排重绘
,因此无论是内存的占用或者 GPU 的渲染都会给性能带来一些损耗。
举个栗子🌰:
假设我们需要在页面长列表中渲染 10000 条数据,代码如下:
效果如图:
接下来,我们看下页面加载性能分析图:
从图中可以清楚的看到脚本的 0 执行占用6s
多,渲染用时将近1s
,而且 CPU 占用从开始的46MB
一直到196MB
那怎么解决这个问题呢?总体思路是这样的:让页面只显示我们能看到的东西,看不到的东西不显示,然后监听滚动条的变化,当滚动条变化的时候重新显示可见区域就完事了,简单画个图:
初始样子:
当滑动了一个位置:
我们只观察绿色边框区域就行了,当移动一个位置后,表示 1 的数据条消失了,表示 7 的数据条又出现了,其实只是位置发生了变化,这就是主要实现的思路。
代码实现:
APP.vue
ListItem.vue 组件
RecycleScroller.vue 组件
最终效果:
同样是渲染 10000 条数据,我们来看下这种方案性能图:
从图中可以清楚的看到脚本的执行用了335ms
,渲染用时6ms
,内存占用 14.3MB 到 30MB,跟第一次性能图可谓天差地别。
上面的代码大家没必要记,关于长列表优化这块是有一个插件的,名字叫vue-virtual-scroller
,链接地址
接下来,我们在项目中使用这个插件:
安装
npm i vue-virtual-scroller
修改代码,将原先
RecycleScroller
移除,导入新安装的组件,别忘了还要引入 css 文件import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
APP.vue
导入插件后,效果是一样的。
😊 好了, 以上就是我的分享,希望小伙伴们点赞 👍 支持一下哦~ 😘,我会更有动力的 🤞
版权声明: 本文为 InfoQ 作者【法医】的原创文章。
原文链接:【http://xie.infoq.cn/article/d1555a14814966cadcdac6dae】。文章转载请联系作者。
评论