面试官:什么是防抖和节流?有哪些实现方式?

通俗理解

防抖

平时我们买手机或者相机,都具有防抖功能,相机的防抖和这里防抖逻辑上是一样的。当我们拿起相机记录视频的时候,我们的手会不停的抖动,但是拍出的视频却抖的却不是很厉害,原因就是相机把n毫秒之内的抖动给忽略掉,使相机的镜头始终保持在n毫秒之前的状态。

节流

物体在的移动在空间和时间上是连续的,但是我们记录的视频却是一帧一帧的,原因就是相机忽略了n毫秒内的物体移动,以节省存储空间。这个过程可以理解为节流。

其实说明一些问题未必要举和事物本身不一样的东西,那接下来我们就拿开发网页时真是遇见的场景。

真实场景

场景

你正在开发一个用户注册页面,你家平台里规定,昵称必须唯一,但是不要等用户点击注册按钮的时候才去检查,要做到尽快的去检查。

首先我们想到,每当输入框改变的时候,我们就检查一次是否已经有人注册。如果用户很快速的输入,显然这样查询太快,对服务器压力太大。

面对这个问题,我们可以想到两个方案来解决。

1. 防抖

输入框的前后两次改变超过n毫秒才执行查询,只要改变时间间隔小于n毫秒就不执行查询。

2. 节流

n毫秒内的改变只执行一次查询。

是不是和相机的例子很像?

我们有了两种解决方案,到了代码层面怎么实现呢?我们先试试用直截了当的方式实现一下。

简单实现

1. 防抖:

<input name="username" type="text" oninput="checkUsername(this)">
<script>
    var handler;
    function checkUsername(it) {
        clearTimeout(handler);
        handler = setTimeout(() => {
            // TODO
        }, 1000)
    }
</script>

可以仔细分析一下,这几行代码是不是上面的方案一。

如果在1000毫秒内,反复执行checkU

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酔清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值