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

Vue3 el-tree-v2渲染慢的问题

一、现象

使用el-tree-v2处理组织架构权限时,整个树的数据在8500条,勾选数据8200条,打开页面需要8~10秒,用户无法接受。 经调试,发现主要卡在树的渲染回显上(勾选数据少时,很快,勾选数据越多越慢)。

原始代码如下:

 <el-tree-v2 highlight-current ref="treeRef" node-key="orgNo" :data="orgOptions" :width="600" :height="380"
              :props="props" show-checkbox />

//取得后端数据后进行勾选
proxy.$nextTick(() => {
        proxy.$refs.treeRef.setCheckedKeys([]);        
        proxy.$refs.treeRef.setCheckedKeys(checkedKeys.value);     
      });

二、解决方法

1.设置属性:check-strictly,如下

<el-tree-v2 highlight-current ref="treeRef" node-key="orgNo" :data="orgOptions" :width="600" :height="380"
             :props="props" show-checkbox :check-strictly="checkStrictly" />
  
const checkStrictly = ref(false);           

2.在取回后端数据时,处理checkStrictly
处理逻辑:

  1. 先设置树为严格模式(不联动)
  2. 记录选中的条数
  3. 设置树的选中状态(不联动,速度很快)
  4. 最后一条时,恢复树联动状态
  5. 延时处理最后一条(会自动刷新整个树的勾选状态)

代码如下:

 let checkedIndexs = [];
 //设置严格模式,即上下级不联动
 checkStrictly.value = true; 
 //测试数据基本在100毫秒内处理完
 proxy.$nextTick(() => {
        proxy.$refs.treeRef.setCheckedKeys([]);
        let count = checkedKeys.value.length;//此为选中的数据
        //遍历数据,设置复选框状态
        for (let index = 0; index < count; index++) {
          //最后一行时,取消严格模式,即上下级联动
          if (index >= count - 1) {
            checkedIndexs.push(index);
            checkStrictly.value = false;
          }
          proxy.$refs.treeRef.setChecked(checkedKeys.value[index], true);
        }

      });

//延时处理,最后一行,联动状态
setTimeout(() => {
      checkedIndexs.forEach(element => {
        proxy.$refs.treeRef.setChecked(checkedKeys.value[element], true);
      });
    }, 200); //测试数据100毫秒执行完上面的遍历,安全起见,再预留100毫秒

3.效果
经过在上面的处理后,用户基本无感,整个回显处理不过300毫秒。

ps:
这个问题折腾了很久,网上也有说懒加载什么的,也尝试更换别的控件。最后发现是联动处理时,会遍历整个树,造成性能低下。所以,在开始时,取消联动处理(即不遍历树的关系),最后一条数据才处理联动(上级勾选/半勾选),整个树能秒出。


http://www.kler.cn/a/472919.html

相关文章:

  • Linux系列(二)安装Linux和Linux目录结构
  • <代码随想录> 算法训练营-2025.01.03
  • xxl-job回调执行器,发生NPE空指针异常
  • ios脚本巨魔商店多巴胺越狱基本操作教程
  • 数据库环境安装(day1)
  • 基于html5实现音乐录音播放动画源码
  • 阶梯费用计算demo
  • 超详细的 JDK环境配置步骤图文教程
  • 《C++11》右值引用深度解析:性能优化的秘密武器
  • linux安全更新zookeeper docker
  • Python创建GitHub标签的Django管理命令
  • unity TextMeshPro使用window字体的方式
  • LVGL源码(4):LVGL关于EVENT事件的响应逻辑
  • CAD批量打印可检索的PDF文件
  • Redis 性能优化:利用 MGET 和 Pipeline 提升效率
  • 软件测试的未来:如何跨越自动化到自主测试的鸿沟
  • 【深度学习系统】Lecture 4 - Automatic Differentiation
  • 左神算法基础巩固--4
  • ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告
  • Docker 容器运行后自动退出的解决方案