【项目笔记】:elementui下拉框数据太多造成页面卡顿怎么解决?

简介: 针对前端下拉框数据过多造成页面卡顿,元芳你怎么看?

一.前言

开发过程中未出现卡顿现象,在测试的时候出现了卡顿现象,下拉框压根打不开,针对这个问题做了以下优化。

二.解决办法

1.首先可以用原生js封装一个下拉框,这样确实能提高前端性能,但是不多,我说实话。
2.每次进来加载默认值(上一次选的值)的后十条数据,这样的话我觉得可能就是数据不卡了,但是明显多了http请求,不符合雅虎三十五军规。
3.下拉框做数据懒加载

三.下拉框数据做懒加载

思路:通过监听下拉框的滚动条进行加载下拉框数据。针对下拉框搜索功能,我们做了节流。下面是一个小demo,可以根据需求选取有用的片段。
废话不多说,上菜!
html代码:

<el-select v-model="form.value" filterable v-el-select-loadmore="loadMore" :filter-method="selectFilter"
            @visible-change="selectVisible" placeholder="请选择" :popper-append-to-body="false">
            <el-option v-for="item in options_.slice(0, range)" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
</el-select>

js代码

<script>
export default {
   
   
    name: "AboutView",
    data () {
   
   
        return {
   
   
            options: [],//总下拉数据
            options_: [],//过渡下拉数据
            range: 100,//初始渲染条数基数
            filterTime: null,//自定义查询功能的节流定时器
            form: {
   
   
                value: ""
            }
        }
    },
    directives: {
   
   

        'el-select-loadmore': {
   
   

            bind (el, binding) {
   
   

                // 获取element-ui定义好的scroll盒子 监听滚动条加载数据

                const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');

                SELECTWRAP_DOM.addEventListener('scroll', function () {
   
   
                    const condition = SELECTWRAP_DOM.scrollHeight - SELECTWRAP_DOM.scrollTop - SELECTWRAP_DOM.clientHeight;
                    if (condition <= 10) {
   
   
                        binding.value()
                    }
                });
            }
        }
    },

    methods: {
   
   
        getList () {
   
   
            for (let i = 0; i < 100000; i++) {
   
   
                this.options.push({
   
   
                    label: "数据" + i,
                    value: "数据" + i
                })
            }
        },
        loadMore () {
   
   
            //传入指令的增加渲染条数方法
            this.range += 50;
        },
        selectFilter (val) {
   
   
            // 自定义下拉查询方法 做了节流
            if (this.filterTime) {
   
   
                clearTimeout(this.filterTime);
                this.filterTime = null;
            }
            this.filterTime = setTimeout(() => {
   
   
                if (val) {
   
   
                    let filterArr = this.options.filter(item => {
   
   
                        return item.label.toLowerCase().includes(val.toLowerCase());
                    });
                    this.options_ = filterArr;
                } else {
   
   
                    this.options_ = this.options
                }
            }, 500);
        },
        selectVisible (v) {
   
   
            //下拉框显隐监听事件 控制渲染初始数据以及恢复总数据
            this.range = 100;
            if (!v) this.options_ = this.options;
        },
    },
    created () {
   
   
        this.getList();
    }
}
</script>

效果图:soogif (1).gif

相关文章
|
小程序 开发者 异构计算
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
1229 0
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
若依颜色失效怎么办?F12刷新样式不管用,回到控制台,重新点击项目链接就好了
若依颜色失效怎么办?F12刷新样式不管用,回到控制台,重新点击项目链接就好了
|
7月前
|
JSON 小程序 数据库
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
170 0
element-ui时间选择器限制只能点击不让输入(整理)
element-ui时间选择器限制只能点击不让输入(整理)
|
9月前
|
PHP
【最全最详细】使用publiccms实现动态可维护的首页轮播
【最全最详细】使用publiccms实现动态可维护的首页轮播
|
9月前
|
JSON 小程序 JavaScript
面试官说,布局小程序页面记得用TDesign组件库
面试官说,布局小程序页面记得用TDesign组件库