【无标题】Vue长列表性能优化常用方案

长列表性能问题发生的原因?

众所周知HTML页面中DOM的修改会引起页面的重新渲染,重新渲染包含DOM节点的重排和重绘(重排和重绘的知识点可以自行百度),如果页面中大量的DOM节点发生重绘,页面就会出现性能问题。

如何解决出现的性能问题?

1,最常见的方式是分页加载,切片分段加载。

分页加载大家都知道,不再赘述。下面我们看看切片分段加载。

实现原理:requestAnimationFrame + ceateDocumentFragment

假如有10000条数据要渲染展示,我们用代码实现如下:

const total = 10000;
const container = document.querySelector('.container')
let index = 0;
function render() {
    if (index >= total) return;
    index += 50;
    const fragment = document.createDocumentFragment();
    for (let i = 0; i < 50; i++) {
        const li = document.createElement('li')
        li.innerHTML = i;
        fragment.appendChild(li)
    }
    container.appendChild(fragment)
    window.requestAnimationFrame(render)
}
render()

2,按需加载,只渲染可视区域内的DOM节点

实现原理:根据页面滚动高度和列表高度,计算出可视区域数据,推荐现成插件vue-virtual-scroller。

3,对于纯展示型的数据,如果不需要响应式变化,可以响应式数据变成普通数据,通过Object.freeze方法。

总结:

方法1中的切片分段加载,如果用户滑动较快,会出现白屏现象;

对于渲染和计算都耗时的场景,可以使用方法2,按需加载按需渲染。

对于渲染不耗的场景,可以使用方法3;

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值