uniapp 输入框防抖节流_详细讲解节流和防抖

本文详细讲述了uniapp中输入框事件处理的性能优化,通过防抖和节流技术减少频繁的ajax请求,提升用户体验。防抖确保在事件触发后n秒内只执行一次,而节流则规定n秒内只执行一次,适用于不同的场景,如input输入、resize和touchmove等。
摘要由CSDN通过智能技术生成

作为一个开发,我觉得节流和防抖的理念是非常重要,以前我有一篇文章通过举了两个例子来简单的说明了下什么是节流和防抖,今天我将更加详细的去分析说明这两个概念。

备注:有些代码较多的例子为了利于大伙阅读就采用代码图片的形式

f70aae92f89a2b5350a62cb022d83386.png

举个例子

浏览器中某些计算和处理非常昂贵。比如当鼠标响应resize, touchmove,scroll等操作时,绑定的函数触发的频率会很高,如果该函数稍微复杂一些,响应速度会远远跟不上触发频率,便会出现卡顿,延迟,假死等现象。

下面来看一个例子,根据输入框输入的数据发送ajax请求:

 普通处理
普通处理:

复制代码普通处理结果如下:

93061c1b2588b5ad932726cc265c56a9.png

如上图所见,在输入时会不断的发送请求,非常浪费资源。为优化性能,我们可以使用防抖或节流来防止函数被高频调用。

防抖Debounce

原理

在事件被触发n秒后,再去执行回调函数。如果n秒内该事件被重新触发,则重新计时。结果就是将频繁触发的事件合并为一次,且在最后执行。

例如

电梯5秒后会关门开始运作,如果有人进来,等待5秒,5秒之内又有人进来,5秒等待重新计时...直至超过5秒,电梯才开始运作。

使用场景

input输入数据时请求服务器等。

实现

每当事件触发,就去重置定时器。直至最后一次事件被触发,n秒后再去执行回调函数。

3dec26d909e695944c87d8fb1861fc3c.png

加入防抖结果如下:

e7722ed752471ac1889dba1f34d79a79.png

节流Throttle

原理

规定一个时间n,n秒内,将触发的事件合并为一次并执行。

例如

电梯等第一个人进来之后,5秒后准时运作,不等待,若5秒内还有人进来,也不重置。

使用场景

resize,touchmove移动DOM,上拉列表加载数据等。

实现节流的三种方式

1、时间戳方式:

8f80d56f1f166315e71d2cbc15fa6047.png

加入节流-时间戳结果如下:

4f34c301bb601c96ce380e46d15e9f67.png

2、定时器方式:

ceb8cb9937ee48c248d60245691a0bc1.png

加入节流-定时器结果如下:

852b588f273afaab274f8e39b47c4c12.png

3、定时器 & 时间戳方式:

416d2a120c3705ee78e3cd668ded1373.png

加入节流-定时器 & 时间戳结果如下:

768e9945d36f90cf695da18b3471e82a.png

小结

本文主要介绍了防抖与节流的实现方式以及原理。其中,防抖的核心思想是高频操作执行结束,n秒后仅执行一次;而节流是每隔一段时间就会执行一次。掌握了这两个要点,能让你的代码性能更上一层楼。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值