vue 表格几万数据渲染过慢

858 阅读1分钟

背景

基于element 表格,没有分页处理,发现一旦数据几千几万页面渲染和滑动很卡顿

解决方案思路

1、加分页,但要接口配合

2、懒加载的思路,有直接的插件,如npm install el-table-infinite-scroll@1.0.10 如下,也可以自己些懒加载实现

//main.js
import elTableInfiniteScroll from 'el-table-infinite-scroll'
Vue.use(elTableInfiniteScroll)
//vue
<template>
  <div id="app">
    <el-table
      :data="tableData"
      v-loading="loading"
      v-el-table-infinite-scroll="loadTable"
    >
      <el-table-column
        label="id"
        prop="date"
      ></el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  data () {
    return {
      dataTall: [],//总共数据
      tableData: [],//表格展示数据
      n: 20,
      loading: false
    }
  },
  computed: {
  },
  created () {
    this.init()
  },
  methods: {
    init () {
      this.saveDATA = []
      for (let i = 0; i < 1000; i++) {
        this.dataTall.push({
          date: i,
          name: '王小虎' + i
        })
      }
    },
    loadTable () {
      this.loading = true
      if (this.tableData.length < this.dataTall.length) {
        const data = this.tableData.concat(
          this.dataTall.slice(this.tableData.length, this.tableData.length + n)
        )
        this.$set(this, 'tableData', data)
      }
      this.loading = false
    }
  }
}
</script>

3、有大数据的表格插件可以直接用,如pl-table,umy-ui插件

//安装pl-table 
npm i pl-table

//main.js
import plTable from 'pl-table'
import 'pl-table/themes/index.css' // 引入样式(必须引入),vuecli3.0不需要配置,cli2.0请查看webpack是否配置了url-loader对woff,ttf文件的引用,不配置会报错哦
//pl-table 是基于element开发的,继承element的样式和方法 在这里就没有引用pl-table的样式,默认样式就是element的样式
Vue.use(plTable)

//vue 只贴了关键代码
<template>
    <pl-table 
      :data="tableData" 
      size="mini" 
      max-height="600" 
      style="width:100%" 
      fixedColumnsRoll  // //大量数据一定要加
      use-virtual      //大量数据一定要加
     >
       <pl-table-column prop="name" label="姓名" >
       </pl-table-column>
    </pl-table> 
</template>
<script>
export default 
  data() {
    return {
     tableData:[]
    }
  }
//安装umy-ui
npm install umy-ui

//main.js
import 'umy-ui/lib/theme-chalk/index.css';// 引入样式  
import { UTable, UTableColumn } from 'umy-ui';  
Vue.use(UTable);  
Vue.use(UTableColumn);
//vue
<template>
    <u-table
      :data="tableData"
      size="mini"
      use-virtual  //大量数据一定要加
      :row-height="30" //行高
      :max-height="600" //超过出现滚动
    >
     <u-table-column prop="index" align="center" type="index" label="序号" width="60px"></u-table-column>
      <u-table-column
        prop="City"
        align="center"
        label="市州"
      ></u-table-column>
    </u-table>
</template>
<script>
export default 
  data() {
    return {
     tableData:[]
    }
  }

关于自己懒加载的案列如下

element表格el-table组件实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题_前端_D浩DzD-DevPress官方社区 (csdn.net)