为什么要做防抖
主要是为了性能优化。有些高频操作,只需要最后触发一次。比如在缩放页面的时候,我们不应该每次缩放都去执行操作,应该最后只做一次缩放触发的操作就好。或者监听输入框输入内容,不应该输入每个字都去触发,而是应该等用户完成一段输入后,再进行触发。
总结:
高频事件等用户操作结束以后,再进行触发。
思路:
触发事件之后,不直接执行函数,开启一个定时器,把函数放在定时器内触发。如果事件在定时器设置时间内再次触发,则重置定时器。等定时器时间到,执行定时器内函数。
利用高阶函数特性封装防抖
为什么要做节流
节流和防抖经常一起出现,他们都是为了应对高频操作节约性能的。那既然我们有了防抖,为什么还要做节流呢?他们还是有不同的应用场景的。防抖主要是等用户操作的动作结束后再执行某个操作。而节流是某个操作上一次完成执行后再进行下一次,或者说有一定的时间间隔再执行下一次。
节流的应用场景
比如点击一个按钮,发送请求。为了避免用户频繁点击,我们要做处理。如果是用防抖,用户一直点击就一直不会触发请求,这是不合理的。
应用节流,第一次点击就发请求,然后等请求响应以后,才能再次发送请求。
节流代码思路
我们把节流类比为关水龙头!事件触发,立刻执行对应事件函数。然后关闭阀门,阀门关闭后,后续操作都无法触发函数。等一定时间后,打开阀门,操作可以再次触发。
就像把水一下一下截断一样。这样理解很形象了。
利用高阶函数封装节流代码:
总结防抖和节流的区别
防抖是让你多次触发,只最后一次生效。适用于我们只需要触发一次的场景。节流是让你多次操作,但是没隔一段时间才能触发一次。适用于多次触发多次生效的场景。