当前位置: 首页 > article >正文

Vxe UI vue vxe-table select 下拉框选项列表数据量超大过大时卡顿解决方法

Vxe UI vue vxe-table vxe-grid select 下拉框选项列表数据量超大过大时卡顿解决方法

查看 github
vxe-table 官网

vxe-table 本身支持虚拟滚动,数据量大也是支持的,但是如果在可编辑表格中使用下拉框,下拉框的数据量超大时,可能就会卡顿、老版本的下拉框不支持虚拟滚动,可以更新到 v4.7+ 版本,就可以使用下拉框虚拟滚动,配合表格虚拟滚动,渲染性能那是相当可以的。

可编辑表格使用下拉框

每个单元格中放着渲染1万条的下拉框丝滑流程
在这里插入图片描述

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script>
import Vue from 'vue'
export default {
  data () {
    const sexEditRender = {
      name: 'VxeSelect',
      options: [
        { label: '女', value: 'Women' },
        { label: '男', value: 'Man' }
      ]
    }
    const roleEditRender = {
      name: 'VxeSelect',
      props: {
        filterable: true
      },
      options: []
    }
    const gridOptions = {
      border: true,
      editConfig: {
        trigger: 'click',
        mode: 'row'
      },
      columns: [
        { type: 'seq', width: 70 },
        { field: 'name', title: 'Name', minWidth: 200, editRender: { name: 'VxeInput' } },
        { field: 'sex', title: '下拉单选', width: 200, editRender: sexEditRender },
        { field: 'role', title: '大数据量选项', width: 200, editRender: roleEditRender }
      ],
      data: [
        { id: 10001, name: 'Test1', role: 'Develop', sex: '', sexList: [], type: '', typeList: [] },
        { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', sexList: ['Man', 'Women'], type: '2-1', typeList: ['1-2', '2-1'] },
        { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', sexList: [], type: '', typeList: [] }
      ]
    }
    return {
      gridOptions,
      sexEditRender,
      roleEditRender
    }
  },
  created () {
    // 模拟后端接口
    setTimeout(() => {
      const list = []
      for (let i = 0; i < 10000; i++) {
        list.push({
          value: `role${i}`,
          label: `角色${i}`
        })
      }
      this.roleEditRender.options = list
    }, 100)
  }
}
</script>

接下来测试下拉框渲染性能

加载1万条用时45毫秒
在这里插入图片描述
加载10万条用时398毫秒
在这里插入图片描述

加载30万条用时848毫秒
在这里插入图片描述

<template>
  <div>
    <p>
      <vxe-button @click="loadData(1000)">加载1千条</vxe-button>
      <vxe-button @click="loadData(10000)">加载1万条</vxe-button>
      <vxe-button @click="loadData(100000)">加载10万条</vxe-button>
      <vxe-button @click="loadData(300000)">加载30万条</vxe-button>
    </p>
    <vxe-select v-model="val1" v-bind="selectOptions"></vxe-select>
  </div>
</template>

<script>
import Vue from 'vue'
import { VxeUI } from 'vxe-pc-ui'
export default {
  data () {
    const selectOptions = {
      loading: false,
      clearable: true,
      filterable: true,
      options: []
    }
    return {
      val1: null,
      selectOptions
    }
  },
  methods: {
    loadData (size) {
      const list = []
      this.selectOptions.loading = true
      for (let i = 0; i < size; i++) {
        list.push({
          value: `${i}`,
          label: `选项 ${i}`
        })
      }
      setTimeout(() => {
        const startTime = Date.now()
        this.selectOptions.options = list
        this.selectOptions.loading = false
        this.$nextTick(() => {
          VxeUI.modal.message({
            content: `加载时间 ${Date.now() - startTime} 毫秒`,
            status: 'success'
          })
        })
      }, 300)
    }
  },
  created () {
    this.loadData(50)
  }
}
</script>


http://www.kler.cn/news/342298.html

相关文章:

  • Ruby脚本:自动化网页图像下载的实践案例
  • MVS海康工业相机达不到标称最大帧率
  • React 为什么 “虚拟 DOM 顶部有很多 provider“?
  • Halcon OCR字符识别
  • 探索Semantic Kernel:开启AI编程新篇章(入门篇)
  • java连接mysql查询数据(基础版,无框架)
  • 【idea】切换多个仓库到一个分支
  • django中wsgi.py 和 manage.py有什么区别
  • 汽车3d动效的作用!云渲染实现3d动效
  • GC1277和灿瑞的OCH477优势分析 可以用于电脑散热风扇,视频监控和图像处理的图像信号处理器中
  • LlamaIndex 结构化数据库交互指南增强(text2sql)
  • 自动化测试 | 窗口截图
  • 如何设计一个低成本数据归档及查询的架构
  • Cursor AI编辑器:开发效率提升利器
  • Unity网络开发 - C#开源网络通信库PESocket的使用
  • crossover和虚拟机哪个好用?Mac电脑玩游戏用哪个软件?
  • 前端面试题(十三)
  • js中的事件冒泡是什么?
  • JavaScript全局函数研究_手写模仿实现_01:eval、isFinite、isNaN、parseFloat、parseInt
  • el-date-picker设置只有某些日期可选