如何实现element穿梭框性能优化

技术如何实现element穿梭框性能优化这篇文章主要讲解了“如何实现element穿梭框性能优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现element穿梭框

本文主要讲解“如何优化元件梭架的性能”。本文的讲解内容简单明了,易学易懂。请跟随边肖的思路,一起学习学习“如何优化元素穿梭架的性能”。

目录

背景。

解决方案

新问题

先进的

背景

当穿梭框处理大量数据时,渲染过多的DOM节点,导致页面被卡住。

在尽可能不改变组件原有逻辑的前提下,进行优化。

00-1010惰性加载-infinismecroll组件。

先从包中拷贝出原始组件/转移(或者更改源代码并重新打包以维护私有库供使用)。

v-无限滚动='pageDown '

3360无限滚动-立即=' false '添加到。

El-复选框-组

v-show='!hasNoMatchdata.length0 '

v型=“已检查”

:size='size '

:class='{ '是-filterable':filterable} '

class='el-transfer-panel__list '

v-无限滚动='pageDown '

:无限滚动-立即='假'

el复选框

class='el-transfer-panel__item '

:label='item[keyProp]'

: disabled=' item[disabled prop]'

:key='item[keyProp]'

v-for='iteminfilteredData '

option-content : option=' item '/option-content

/El-复选框

/el-checkbox-group在数据中定义pageSize: 20来表示每页的数据数量。Showdata3360 []仅用于显示和替换上述代码中实际需要操作的数据filteredData。

v-for='iteminnb

sp;showData">

同时在watch中相应的处理

data (data) {
    const checked = [];
    this.showData = data.slice(0, this.pageSize);
    const filteredDataKeys = this.filteredData.map(
    (item) => item[this.keyProp]
    );
    this.checked.forEach((item) => {
    if (filteredDataKeys.indexOf(item) > -1) {
        checked.push(item);
    }
    });
    this.checkChangeByUser = false;
    this.checked = checked;
},
filteredData (filteredData) {
    this.showData = filteredData.slice(0, this.pageSize);
 }

初始化展示数量随意这里取 20。

最后添加滚动到底部时调用的方法

pageDown () {
    const l = this.showData.length;
    const totalLength = this.filteredData.length
    l < totalLength && 
    (this.showData = this.filteredData.slice(0, l + this.pageSize > totalLength ?
    totalLength : l + this.pageSize));
},

往下滚动的时候 展示的数据长度增加 20(数量随意), 超出时展示最大长度。

由此基本解决大数据量操作卡顿的问题。由于展示和逻辑层分开,组件的所有操作逻辑无须修改,最小程度减少差异。

新问题

手动滚动到列表末端,再进行搜索操作依然存在卡顿问题。

进阶

在滚动过程中,实际上顶端的数据依旧无法看见,该数据不展示,对用户体验也没有影响,
所以只需展示当前页的 20 条数据。

我们为el-checkbox-group添加一个 ref=scrollContainer 以便操作滚动条,

在data中定义当前页数 curIndex: 1

并对 pageDown 方法进行修改

pageDown () {
      const totalLength = this.filteredData.length
      if((this.curIndex*this.pageSize) < totalLength){
        this.curIndex ++
        const targetLength = this.curIndex * this.pageSize 
        const endPoint = targetLength > totalLength ? totalLength : targetLength
        const startPoint = endPoint - this.pageSize  > 0 ? endPoint - this.pageSize : 0
        this.showData = this.filteredData.slice(startPoint, endPoint);
        this.$refs.scrollContainer.$el.scrollTop = "1px" //滚动条到最上端,衔接下一页,为 0 可能会触发边界问题
      }
    }

为此我们还需要添加向上翻页的方法

InfiniteScroll 指令 只提供向下滚动,我们可以拓展该指令亦可自行添加上滑滚动监听
    mounted(){
        this.$refs.scrollContainer.$el.addEventListener('scroll', this.pageUp)
    },
    beforeDestroy(){
        this.$refs.scrollContainer.$el.removeEventListener('scroll', this.pageUp)
    },

注册pageUp 方法

pageUp(e){
      if(e.target.scrollTop ===0 && this.curIndex>1){
        this.curIndex --
        const endPoint = this.curIndex * this.pageSize 
        const startPoint = (this.curIndex-1)* this.pageSize 
        this.showData = this.filteredData.slice(startPoint, endPoint);
        const el = this.$refs.scrollContainer.$el
        el.scrollTop = el.scrollHeight - el.clientHeight - 1 // 滚动到最底部,衔接上一页, -1 防止边界问题。
      }
    },

当进行数据操作的时候,页面内容变化,滚动条也会随之变化,为防止不能预知的翻页,数据改变时,重置滚动条和当前页码。

initScroll(){
        this.curIndex = 1
        this.$refs.scrollContainer.$el.scrollTop = 0
    },

同时地,在watch中相应时候执行 initScroll

data(){
        ...
        this.initScroll()
        ...
    },
    filteredData (filteredData) {
      ...
      this.initScroll()
    }

至此大数据量的穿梭框,性能大为改善。

感谢各位的阅读,以上就是“如何实现element穿梭框性能优化”的内容了,经过本文的学习后,相信大家对如何实现element穿梭框性能优化这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48999.html

(0)

相关推荐

  • Context-React如何跨组件访问数据

    技术Context-React如何跨组件访问数据这篇文章给大家分享的是有关Context-React如何跨组件访问数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  Context提供了一种

    攻略 2021年12月3日
  • wcf 技术(wcf性能测试)

    技术WCF性能举例分析这篇文章主要介绍“WCF性能举例分析”,在日常操作中,相信很多人在WCF性能举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”WCF性能举例分析”的疑惑有所帮助!

    攻略 2021年12月14日
  • Bytom侧链Vapor源代码分析节点的解块过程是怎样的?

    技术Bytom侧链Vapor源码分析节点出块过程是怎样的Bytom侧链Vapor源码分析节点出块过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。小

    攻略 2021年12月18日
  • 人有多少块肌肉,人最坚硬的肌肉是哪块啊`?

    技术人有多少块肌肉,人最坚硬的肌肉是哪块啊`?人体共约639块肌肉,我们生活中的一切动作,都是在神经系统的调控下,由肌肉的收缩和舒张带动骨人有多少块肌肉、关节运动而实现的。现在,摸摸你的身体,你觉得哪块肌肉最强壮?舌头、

    生活 2021年10月27日
  • 如何理解MyBaitis的源码

    技术如何理解MyBaitis的源码如何理解MyBaitis的源码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Mybatis 架构怎么看源码下载源码 (

    攻略 2021年10月21日
  • 二字词,有“开始”意思的二字词语

    技术二字词,有“开始”意思的二字词语红尘 轮回 牵绊 红颜 流年 沧海 年华 相知 奈何 旖旎二字词、遒健、翩跹、轻谧、深邃、真淳、耄耋、倥偬、矍铄 斑驳、悸动、秋昆、浮华、汗颜、拨冗、莅临、韶华、茕茕、孑然 荏苒、昭然

    生活 2021年10月20日