Vue 防抖与节流的理解+实例

使用防抖与节流的根本原因是因为在项目开发中,我们会大量的调用函数,如果事件处理函数调用的频率不受控制的话,那么会对浏览器造成很大的负担,很有可能造成卡顿,用户体验会非常差。

想象一下,当在点击一个按钮的时候,常常会调用接口进行一系列的操作,如果点击按钮的频率过高,会出现什么情况呢?点击一次,调用一次接口,相应的操作一直在进行(比如页面一直进行跳转),这样是我们想看到的吗,当然不是,所以我们要采取一定的措施进行 阻止或者缓解 调用的次数。

接下来,我将分享一下现阶段的我对防抖与节流的初步理解:

实现防抖与节流的关键在于使用定时器来进行控制,在一定时间内执行回调。

防抖:在事件被触发n秒后再执行回调,如果在n秒内又被触发,则重新计时。

// 防抖
<template>
    <div>
        <input type="text" @keyup="debounce" />
    </div>
</template>

<script>
export default {
    data() {
        return {
            timer: null
        }
    },
    methods: {
        debounce() {
            if(this.timer) {
                clearTimeout(this.timer)
            }
            this.timer = setTimeout(() => {
                console.log("防抖...")
                this.timer = undefined
            }, 2000)
        }
    }
}
</script>

在输入框搜索时,如果不使用防抖,那么每按下一个键都会请求数据,这样的频繁操作不是我们想要看到的。使用防抖后,会自动检测到触发n秒后再执行回调,很好的阻止了频繁请求。

节流:规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效。

// 节流
<template>
    <div>
        <button @click="throttle">按钮</button>
    </div>
</template>

<script>
export default {
    data() {
        return {
            timer: null,
            lastTime: null
        }
    },
    methods: {
        throttle() {
            let now = +new Date()
            if(this.lastTime && now - this.lastTime < 200) {
                clearTimeout(this.timer)
            } else {
                this.lastTime = now
                this.timer = setTimeout(() => {
                    console.log("节流...")
                    this.lastTime = +new Date()
                }, 200)
            }
        }
    }
}
</script>

在开发人员在多次测试时就会发现,多次点击一个按钮会自动进行多次操作,当然我们可以定义一个变量来控制按钮只能点击一次,但是那样的方法是不友好的,如何能够友好的让使用者操作按钮,这成为开发人员重点考虑的问题。以上方法是通过使用节流的方法来控制,在一定单位时间内,只能触发一次,这样,既能防止用户多次点击带来的问题,又不限制于用户只能点击一次。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue防抖节流是两种常用的优化方式,用于限制函数被频繁触发的次数。 1. 防抖(Debouncing):在一段时间内,多次触发同一个函数,只执行最后一次触发,可以避免函数过于频繁执行。 防抖常用场景:输入框搜索联想、页面滚动等。 使用方法:可以使用lodash库的`debounce`函数或自定义防抖函数。 实现原理:设置一个定时器,在函数被触发时先清除之前的定时器,然后重新设置定时器,当定时器到达时间后执行函数。 2. 节流(Throttling):在一段时间内,多次触发同一个函数,按照指定的间隔时间执行函数,可以减少函数的执行次数。 节流常用场景:滚动条下拉刷新、窗口resize等。 使用方法:可以使用lodash库的`throttle`函数或自定义节流函数。 实现原理:设置一个定时器,在函数被触发时判断是否已经达到指定的间隔时间,如果是则执行函数并重置定时器,如果未达到则不执行。 防抖节流都可以通过设置时间间隔来调整触发的频率。在vue中,可以将防抖节流函数绑定到事件触发的回调函数上,以实现优化。这些函数在vue的指令(`v-on`)中应用广泛,例如: ``` <input v-model="keyword" v-on:input="debounceSearch"> ``` 在这个例子中,`debounceSearch`函数会在用户输入时触发,但是只有在用户输入停止一段时间后才会执行搜索操作,以避免输入过程中频繁执行搜索的情况发生。 总之,防抖节流vue中常用的函数优化方式,能够有效控制函数执行的频率,提升用户体验和页面性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值