【antd-vue 4.x transfer 穿梭框40w条数据全选卡死优化】

Ant Design Vue 4.x 版本穿梭框大数据下全选时卡死排查优化

10w条数据时点击右边全选框,出现卡死现象。

  1. 下载并运行antdv源码,使用for循环模拟10w条数据在穿梭框中,从右往左点击全选。
    在这里插入图片描述
  2. 通过浏览器性能分析记录,可以看到js代码执行花了31218毫秒,大约31秒。
    在这里插入图片描述
  3. 排查:
    在这里插入图片描述
  4. 在transfer的源码中发现
...filter(....indexOf())  这儿存在问题,可能会导致双重for循环操作

打印执行时间看,这里确实存在问题。
在这里插入图片描述
5. 优化使用for 循环 + map 解决此类问题

// 优化测试代码 使用此代码替换途中watch
    watch(
      () => props.selectedKeys,
      () => {
        const sKeys = props.selectedKeys || [];
        const tkeys = props.targetKeys || [];
        const sourceKeys = [];
        const targetKeys = [];
        const map = {};

        for (const key of tkeys) {
          map[key] = key;
        }

        for (const key of sKeys) {
          const hasKey = map[key];

          if (hasKey) {
            targetKeys.push(key);
          } else {
            sourceKeys.push(key);
          }
        }

        sourceSelectedKeys.value = sourceKeys;
        targetSelectedKeys.value = targetKeys;
        // sourceSelectedKeys.value =
        //   props.selectedKeys?.filter(key => props.targetKeys.indexOf(key) === -1) || [];
        // targetSelectedKeys.value =
        //   props.selectedKeys?.filter(key => props.targetKeys.indexOf(key) > -1) || [];
      },
      { immediate: true },
    );
  1. 优化后 10w 40w全选数据如下图
    在这里插入图片描述
    在这里插入图片描述
  • 操作40w 条数据内存占用
    在这里插入图片描述
  1. 把更改后的组件集成到项目中,替换原有的组件(这里就不描述了,欢迎私信讨论)。

  2. 优化完成,还有许多不足,欢迎讨论。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值