iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >element table 数据量大页面卡顿的解决
  • 397
分享到

element table 数据量大页面卡顿的解决

2024-04-02 19:04:59 397人浏览 八月长安
摘要

目录element table数据量大页面卡顿调用接口table组件data里使用到的数据el-table大数据量渲染卡顿的一种思路思路滚动监听sliderelement table

element table数据量大页面卡顿

table显示医院列表,这里后台未做分页,总共数据大约8000条。

一次性全部赋值给table整个页面都会卡顿好几秒。

查看了请求接口到数据返回的时间为192ms,可以接受。

在这里插入图片描述

应该是页面渲染的问题。

这边就在前端做了分页处理。

调用接口

 // 获取医院列表
    getHospitalList() {
      this.$api.Hospital.GetHospitalList().then(res => {
        if (res.status == 200) {
          this.tableData = res.data.response;
          this.total = res.data.response.length;
        }
      });
    },
  // 分页
  handleCurrentChange(currentPage) {
    this.currentPage = currentPage;
  },
  // 搜索
 searchList() {
   let params = "";
   switch (this.select) {
     case "1":
       if (this.input3) {
         params = this.input3;
         this.$api.Hospital.QueryHospitalsByName(params).then(res => {
           if (res.data.length > 0) {
             this.tableData = res.data;
             this.currentPage = 1;
             this.total = res.data.length;
           } else {
             this.$message({
               message: "未查询到医院信息",
               type: "info"
             });
           }
           console.log(res);
         });
       }
       break;
     case "2":
       if (this.input3) {
         params = this.input3;
         this.$api.Hospital.QueryHospitalsByCode(params).then(res => {
           if (res.data.length > 0) {
             this.tableData = res.data;
             this.currentPage = 1;
             this.total = res.data.length;
           } else {
             this.$message({
               message: "未查询到医院信息",
               type: "info"
             });
           }
           console.log(res);
         });
       }
       break;
     default:
       console.log(111);
   }
 },

table组件

<el-table
    :data=" tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize )  "
    border
    style="width: 100%"
    height="400"
    size="mini"
    highlight-current-row
  >
   ……
  </el-table>
  <el-pagination
    layout="prev, pager, next"
    background
    :page-size="pageSize"
    :total="total"
    @current-change="handleCurrentChange"
  >
  </el-pagination>

data里使用到的数据

data(){
	return {
		total: 0,
		currentPage: 1,
        pageSize: 50,
	}
}
		

在这里插入图片描述

el-table大数据量渲染卡顿的一种思路

现需要呈现一个表格,有近500行,30多列,使用Vue+elementUI呈现。

这个数据量不算大,但可能列数比较多,渲染时速度很慢,滚动会有卡顿,使用体验不佳。

但并不想做分页处理,想要尽可能接近excel的呈现。

思路

假设全部数据为allData(数组),现在使用一个displayData(数组),displayData = allData.slice(scorll, scorll+ displayCount),scroll表示当前滚动到的index, displayCount表示要展示的行数。把displayData设为el-table的数据源,只渲染该部分数据。通过对表格添加滚动事件监听,来动态更新scroll,并且对scroll添加watch,当scroll发生变化,就自动更新displayData。

滚动监听

监听滚动需要考虑到兼容性,火狐是DOMMouseScroll,其他的是mousewheel。

            
            this.table = this.$refs.mytable.bodyWrapper;
            
            
            let userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
            let ff = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器          
            if (ff) {
             this.table.addEventListener('DOMMouseScroll', (event) => {
                    let detail = event.detail;
                    //滚动方向
                    let down = detail > 0;
                    
                    });
            }else{
              this.table.addEventListener('mousewheel', (event) => {
                    let wheel = event.deltaY;
                    //滚动方向
                    let down = wheel > 0;
                    });
            }

slider

除了滚动表格,还需要一个模拟滚动条。这里选用slider控件,和scroll绑定。

发现elementUI的slider数值方向只能从下到上,且不能有太多的定制化。找到另外一个可深度定制化的vue slider控件:vue-slider-component。通过参数配置及CSS修改使其尽可能像滚动条。

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: element table 数据量大页面卡顿的解决

本文链接: https://www.lsjlt.com/news/163522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作