防抖和节流
笼统的说,防抖和节流,就是防止代码被频繁调用。
节流和防抖的区别,就是第几次有效的问题。
节流,可以想象”开源节流“,比如,你想让麻麻买一个棒棒糖,第一次她给你买,但是短时间内,你想要吃第二次,麻麻就不给你买了,也就是说,第一次同意,第二,三次都不同意。
防抖,想象一下得了帕金森的老头,按屏幕,按了好几次,那么第几次有效呢?最后一次。
先说节流:我们浏览器的一个网页,它的UI线程只有一个,同时处理界面渲染和JS运行,但是如果JS运算量太大的话,就会导致线程阻塞,轻微的就是卡顿,严重就是无响应。
节流就是,高频事件在n秒内只执行了一次。
实现思路:节流函数:在一定时间内,......
在一定时间内,它只执行了第一次=>
一定时间:一个定时器 =>
单位时间内,已经有定时器,就不再执行了=> 制造一个“自毁式”定时器,如果在一段时间完成了什么,就自己把自己销毁 =>在下一次调用的时候,首先先不执行这个方法本身,先判断上一次执行的定时器是否被销毁,如果被销毁,就再执行,如果没有被销毁,就不执行
防抖实现思路:
防抖是在一定时间后执行,那么我们可以设定一个定时器,比如10ms,就是让函数10ms后执行,在10ms内触发了另外一个方法=>
如果不加干涉,执行了2个函数 =>
把上一次放到定时器里的方法通过clearTimeout方法取消掉=>
也就是说,方法1先执行,在10ms内,方法2又被执行,方法1就被取消=>
最终执行的就是方法2