您现在的位置是:首页 >技术教程 >elementui里的table表格组件大数据渲染严重的性能卡顿问题网站首页技术教程

elementui里的table表格组件大数据渲染严重的性能卡顿问题

.伊泽瑞尔 2023-05-24 16:00:03
简介elementui里的table表格组件大数据渲染严重的性能卡顿问题

elementui里的table表格组件在面对大数据量的时候渲染会出现严重的性能卡顿问题,网上也有很多解决方案,比如什么延迟加载,虚拟加载等等,这里为了避免大家走弯路,直接上终极解决方案大招:趁早换组件、马上换组件、现在就去换组件!!!

在这里推荐的一个可以平替elementUI的table组件的库那就是 umy-ui


关于umy

umy-ui库中的table表格组件,它不造轮子。它改造了element-ui等等库的表格组件。解决大数据表格渲染的核心方法是虚拟表格

用法

安装:

npm install umy-ui

main.js(本文按照全部引入的方式引入的):

import UmyUi from 'umy-ui'
import 'umy-ui/lib/theme-chalk/index.css';

Vue.use(UmyUi);

vue文件:

<u-table
        :header-cell-style="headerStyle" 
        :height="tableHeight"
        :row-height="rowHeight"
        @selection-change="selectionChange"
        use-virtual 
        ref="tableRef"
        :data="tableData">
        <u-table-column label=" " type="index" fixed="left"></u-table-column>
        <u-table-column
            type="selection"
            fixed="left"
            width="55">
        </u-table-column>
        <u-table-column
            prop="id"
            label="id"
            width="100"
        ></u-table-column>
        <u-table-column
            :label="操作"
            width="140"
            fixed="right"
        >
            <template slot-scope="scope">
              <span class="spanBtn" @click="view(scope.row)">查看</span>
            </template>
        </u-table-column>
</u-table>

data() {
    return {
      rowHeight: 60,
      tableHeight: window.innerHeight - 420,
      headerStyle: { // 表头样式
        backgroundColor: "#d9d9d9",
        fontSize: "14px",
        fontWeight: 900,
        color: "#333"
      },
      tableData: []
    }
}


注意点:

  • height:是表格的整体高度,不给height或者不给maxheight,又或者给的是0,use-virtual直接会关闭
  • use-virtual:是整个表格的核心,添加该属性意味着启动虚拟表格可以解决数据渲染卡顿问题。
  • row-height:use-virtual未开启的情况可以不需要,行高(必须要设置行高,如css给td给了80高度,那么你就给row-height给80,不要乱给高度,以td tr高度为准,否则会导致表格计算不正确,row-height不是去为了设置表格行高,它只是为了表格里面计算某些东西。如果你需要改变你的行高,你需要去写css改变td的高度即可!)

出现表格渲染错位的解决办法

watch: {
    "tableData" (val) {
      this.$nextTick(() => {//修复表格错位
        this.$refs.tableRef && this.$refs.tableRef.doLayout()
      })
    }
  },
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。