2021-10-29

背景:

我们在工作中常常会遇到成千上万的数据,而在使用element-ui树形控件的时候,由于数据量过大,会导致页面卡顿甚至卡死的现象。

优化方案:

          针对数据量过大的优化我们通常会采用分页查询,或者采用点击当前节点再去查询下一级的数据。在采用点击当前节点再去查询子级的数据的情况下我们可能会遇到这样一种情况,就是子级的数据可能就有上万条。这里我们就可以使用以下方案来解决页面卡顿的问题。

这里引用:https://segmentfault.com/q/1010000038447910?utm_source=tag-newest

          作者二次封装的el-tree组件,原理是用vue-virtual-scroll-list插件,将树形多级dom转化为同级dom。此插件是一个虚拟滚动插件,原理是传入一个固定渲染指定的dom数量,比如传入渲染100个dom,页面中的元素一直都会是100个,然后通过scroll-list滚动时插件替换页面的数据,而不是往里添加数据,这样就不会卡死

先拉取下面的组件代码:https://gitee.com/strivelei/element/tree/dev/packages/tree/src

          将整个tree文件夹放到你项目所在的components公共组件下,然后用法和el-tree一样,先引用资源,然后注册组件:

import tree from '@components/tree/src/tree.vue'

Vue.component('mTree', tree)

然后使用:

 

注意事项

需要注意的是我们在使用二次封装的z-tree组件时需要下载vue-virtual-scroll-list依赖,并且在封装的组件中的tree.vue文件里面virtual-list组件要添加高度,如果设定100%的话,需要父组件添加固定高度;vue-virtual-scroll-list组件的参数可以查看官方文档;

<virtual-list :style="{ 'height': height + 'px', 'overflow-y': 'auto' }"

                  :data-key="getNodeKey"

                  :data-sources="visibleList"

                  :data-component="itemComponent"

                  :keeps="80"

                  :extra-props="{

        renderAfterExpand,

        showCheckbox,

        renderContent,

        props,

        onNodeExpand: handleNodeExpand

      }"

    />

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Web端 https://www.nowcoder.com/discuss/588372 1.float如何清...
    陈一季阅读 4,322评论 2 18
  • 日常知识点总结(vue篇): 1、vue的生命周期: Vue实例从开始创建,初始化数据,编译模板,挂载Dom->渲...
    依稀_Sting阅读 765评论 0 2
  • 前言 移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验...
    R_X阅读 354评论 0 0
  • ① v-if 和 v-for 那个优先级更高?如果两者写在同一个标签,该如何优化? 通过源码了解到render函数...
    我姓龙阅读 298评论 0 0
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,784评论 3 8