傻大方


首页 > 人文 >

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



按关键词阅读:

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

通俗理解防抖平时我们买手机或者相机 , 都具有防抖功能 , 相机的防抖和这里防抖逻辑上是一样的 。 当我们拿起相机记录视频的时候 , 我们的手会不停的抖动 , 但是拍出的视频却抖的却不是很厉害 , 原因就是相机把n毫秒之内的抖动给忽略掉 , 使相机的镜头始终保持在n毫秒之前的状态 。
节流物体在的移动在空间和时间上是连续的 , 但是我们记录的视频却是一帧一帧的 , 原因就是相机忽略了n毫秒内的物体移动 , 以节省存储空间 。 这个过程可以理解为节流 。
其实说明一些问题未必要举和事物本身不一样的东西 , 那接下来我们就拿开发网页时真是遇见的场景 。
真实场景场景你正在开发一个用户注册页面 , 你家平台里规定 , 昵称必须唯一 , 但是不要等用户点击注册按钮的时候才去检查 , 要做到尽快的去检查 。
首先我们想到 , 每当输入框改变的时候 , 我们就检查一次是否已经有人注册 。 如果用户很快速的输入 , 显然这样查询太快 , 对服务器压力太大 。
面对这个问题 , 我们可以想到两个方案来解决 。
1. 防抖输入框的前后两次改变超过n毫秒才执行查询 , 只要改变时间间隔小于n毫秒就不执行查询 。

2. 节流n毫秒内的改变只执行一次查询 。

是不是和相机的例子很像?
我们有了两种解决方案 , 到了代码层面怎么实现呢?我们先试试用直截了当的方式实现一下 。
简单实现1. 防抖:
可以仔细分析一下 , 这几行代码是不是上面的方案一 。
如果在1000毫秒内 , 反复执行checkUsername函数 , 那么setTimeout就会被反复清除 , 并且反复设置一个新的1000毫秒的定时任务 。 直到你执行checkUsername的前后两次间隔超过1000毫秒 , 定时任务才有机会执行一次 。
2. 节流:
可以分析一下这几行代码 。
第一次执行checkUsername的时候 , !isRuning为ture , 执行关键代码 , 改变isRuning为true , 设置一个1000毫秒后再把isRuning再改为false 。 那么 , 当你在1000毫秒内反复执行checkUsername的话 , 关键代码都不会执行 , 只有等到定时器执行后 , 再次执行checkUsername , 才会执行关键代码 。
以上代码都是直接了当的实现了需求 。 但是防抖和节流的需求很多 , 仔细分析 , 我们发现 , 有些代码属于样板代码 , 和业务逻辑无关 , 我们的业务逻辑就在TODO , 所以 , 我们能不能提炼一下呢?
重构防抖分离
首先 , 你写了一个函数 , 这个函接受两个参数 , 参数的含义是 , 一个是待执行的函数(TODO) , 一个是时间间隔 。 函数返回一个函数 , 这个函数就会被反复调用的话 , 就会符合防抖的定义 。
应用
这样 , 我们只需要关注业务代码就可以了 。
节流分离
应用
无甚好说 , 不复杂 。 有疑问 , 可留言 。
装饰器模式或许你的项目引入typescript , 正好TS很好的支持装饰器模式 , 于是你想用装饰器实现该功能 。 讲真 , 这个方式更优雅 。
防抖分离先实现一个防抖的方法装饰器 。

如果不太理解装饰器的话 , 可以看我前面的文章 , 或者去网上查找 。 不过 , 我的示例 , 具有实际应用价值 。
核心代码和上面的基本一致 , 这里要套用ts装饰器的语法 , 及在里面如何使用this 。
应用这里借助Vue项目演示 。

应用无甚好说 。
节流也一并写出来 , 无甚好说 。 有问题 , 欢迎留言 。
节流抽离
应用
总结还有其它方式 , 比如观察者模式 , 大概思路是 , 不断触发的那个事件转化成自定义事件 , 然后在自定义事件里应用防抖或者节流把这个事件放缓 , 最终由观察者处理这个放缓的事件 。 这个暂时就不写在这里了 。分页标题#e#
其实 , 我们遇到问题 , 一旦了解问题的现象及本质 , 就可以搜寻自己的知识结构 , 找到对应的解决方案 。
最后 需要这些面试资料的 , 可以私信 666 领取

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


    来源:(清风酔)

    【】网址:/a/2021/0224/kd735961.html

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


    上一篇:手环|一款高颜值的睡眠手环,OPPO手环黑金版开售,价格诱人

    下一篇:ai|马赛克神秘外衣被脱下,AI解码让文字打码也不保


    人文

    东北|东北“热炕头”上的五大下酒菜,在本地太火爆,你吃过没

    阅读(49)

    酒,这玩意是个好东西,有事没事的时候喝一喝,还是蛮上头的,当然,喝酒怎能少了下酒菜这玩意呢,不管是哪个年龄阶段的人喝酒,下酒菜是一定不能少的,因为有它在,酒才能喝得更香,喝的也更持久。那么今天我们就来了解一下,在东北非常火爆的几款下酒菜,都...

    人文

    谷城人才超市|谷城县城关镇退捕转岗在行动!

    阅读(26)

    谷城县公共就业和人才服务局石俊松就创业意识对学员进行讲课。石老师灵活运用专业知识和丰富有趣的案例向学员们讲解了“创业条件”“创业想法”等方面的问题,并对最新相关政策扶持进行了解读。进一步引导学员增强创业意识,拓宽创业思维,掌握创业基本知识技...

    人文

    成神|网络作家数量增多,你又该如何脱颖而出

    阅读(37)

    网文行业便是其中之一。因为网文写作属于“纯线上”的工作,而目前的年轻人基本上都有电脑,有网线,那就OK.网文写作需要耐得住寂寞,需要长时间的宅在家里。而这段时间正好要宅在家里,写作的确是一个不错的选择。作者如果能把小说写出名气,那订阅收入可是...

    人文

    中国籍|天津新增1例境外输入新冠肺炎确诊病例 系瑞典输入

    阅读(35)

    该患者7月25日自斯德哥尔摩乘坐航班(CA912),当日抵达天津滨海国际机场。入境时体温36.4℃,申报无症状。经海关排查采样及抗体筛查,其新冠病毒抗体IgM阳性、IgG阳性,即由120救护车转运至空港医院。当日新冠病毒核酸检测结果阳性,胸CT检查显示两肺外周带...