树层级处理上万条数据优化!

简介: 树层级处理上万条数据优化!

“”

前言

项目中,部门数超万,导致页面加载价卡顿怎么办?使用若依自带解析树的方法在本地运行没有任何问题,但是一发布到服务器上就显示加载超时。

image-20211204221839327

仔细一看,原来是加载时间超过了10秒,所以就超时了,于是,我们就想了个笨办法,让客户多等会儿,把最大超时时间设置成30秒,哈哈哈哈~

但是,这肯定不是个万全之策,得另想其法。

原因

经过仔细寻找,发现服务器上所有的数据库都没了……

然后就开始分析原因,是因为刚刚在创建表的时候失误删掉了?也不可能啊,除了手动用工具创建表之外,执行的sql语句也就个select * from 表名啊,不可能会误删掉呢。。。

于是我将超时时间设置成30秒之后,果然没有问题,部门数据在12-13秒左右就加载出来了,但是用户体验度极差。

后来经过仔细对代码分析得出,后台查询数据库1万条是没有问题,那时间浪费在哪里呢?浪费在了将接口中返回的数据封装成树的方法上了,代码如下:

image-20211204222519670 image-20211204222559860

此处是页面一进来加载时就查询所有数据,然后通过调用handleTree,将数据组装成树状展示在表单中。

image-20211204222724100

所以才导致的卡顿。

解决方法

思路就是,先查询最外面的父节点,也就是全国所有省,目前库中有38个,然后在点击前面的展开箭头时,再去查询该节点中的子节点,也就是通过懒加载的方式,减轻服务器压力,从而提升系统的性能。

使用到的vue组件:<treeselect>,html中的代码如下:

<el-form-item label="归属部门" prop="deptId">
              <treeselect
                v-model="form.deptId"
                :options="deptOption"
                :load-options="loadOptions"
                placeholder="请选择归属部门"
              />
            </el-form-item>

当然,需要提前在data中声明deptOption变量,然后在methods中编写查询父节点的方法以及懒加载的方法:loadOptions

//所属部门的树状
    getDeptByAddUser(){
      listDeptAll(this.paramDeptQuery).then((response) => {
        let list = [];
        let data = response.data;
        data.forEach(element => {
          element['id'] = element.deptId;
          element['label'] = element.deptName;
          element['children'] = null;   //要设置为空,才能触发:load-options="loadOptions"动用
        });
        this.deptOption = data;
      });
    },
//懒加载(点击小箭头时显示的值)
    loadOptions({ action, parentNode, callback }) {
      this.paramDeptQuery.parentId = parentNode.id;
      listDeptAll(this.paramDeptQuery).then((response) => {
        let data = response.data;
        data.forEach(element => {
          element['id'] = element.deptId;
          element['label'] = element.deptName;
          element['children'] = null;   //要设置为空,才能触发:load-options="loadOptions"动用
        });
        parentNode.children = data;
        callback();
      });
    },

最后部署在服务器上,完美解决问题。

总结

别让困难与懒惰阻止你前进,不尝试不动手永远解决不了问题!

相关文章
|
7月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
65 0
|
8月前
|
JavaScript Java
树状结构数据按照顺序排序
树状结构数据按照顺序排序
73 0
|
存储 算法
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
283 0
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
|
存储 算法
一篇文章让你整体了解数据结构《图》,千字超详细总结!
图 本章主要介绍了图这个数据结构的相关知识,包含图的基本概念及其关键词、使用不同的数据结构去存储图,算法包括图的遍历、图的拓扑排序、图的最小生成树算法。 可以转载,但请声明源链接:文章源链接justin3go.com(有些latex公式某些平台不能渲染可查看这个网站) 图的关键词
255 0
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
C++是一种计算机高级程序设计语言, 由​​C语言​​​扩展升级而产生 , 最早于1979年由​​本贾尼·斯特劳斯特卢普​​在AT&T贝尔工
|
关系型数据库 MySQL 索引
新增数据时,MySQL索引树的自调整过程
刚开始你一个表建好后,就一个数据页,就是聚簇索引的一部分,而且还是空的。若你插入数据,就是直接往这数据页里插入,也没必要给他弄索引页
121 0
|
存储 人工智能 搜索推荐
【八大数据排序法】堆积树排序法的图形理解和案例实现 | C++
排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。
161 0
【八大数据排序法】堆积树排序法的图形理解和案例实现 | C++
|
存储
7-3 树的同构 (25 分)
7-3 树的同构 (25 分)
149 0
7-3 树的同构 (25 分)
|
算法
【数据结构和算法】图的应用(最小生产树、最短路径、拓扑排序、关键路径)
【数据结构和算法】图的应用(最小生产树、最短路径、拓扑排序、关键路径)
307 0
【数据结构和算法】图的应用(最小生产树、最短路径、拓扑排序、关键路径)