避免渲染大量数据造成页面卡顿——虚拟滚动

后端一次性返回太多数据需要前端全部渲染造成页面卡顿或者浏览器崩溃怎么办?

常见处理方式是和后端沟通数据分页,真正减少数据量,但若不具备此条件需要仅在前端处理或前端需要展示全部数量的情况,可以使用虚拟滚动的方式。

【需求】Vue项目,后端传过来的数据对象数组items, 在前端以表格展示,并且部分列可以修改,点击提交按钮将修改后的数据全部回传。

【实现】引入vue-virtual-scroll-list库,一个适配Vue2项目的轻量级虚拟滚动库

scss 复制代码
npm install vue-virtual-scroll-list --save

vue-virtual-scroll-list 提供了一个名为 virtual-list 的组件,你需要将它注册到你的 Vue 组件中,并传入三个核心属性:

  • data-key :数据项的唯一标识字段(如 id)。
  • data-sources:数据源数组(即你的 9000 条数据)。
  • data-component:用于渲染每个列表项的子组件。

同时,需要给 virtual-list 设置一个固定高度(或最大高度),并开启滚动。

完整示例如下:

父组件

ruby 复制代码
<div class="list-container">
    <virtual-list
        style="height: 500px; overflow-y: auto;"
        :data-key="'id'"
        :data-sources="items"
        :estimate-size="60"
        :keeps="30"
        :data-component="rowComponent"
        :extra-props="{ onUpdateCell: handleUpdateCell }"
    >
    </virtual-list>
</div>
kotlin 复制代码
handleUpdateCell(data: any){
  this.items[data.index][data.column] = data.value;
}

子组件