为什么要防抖节流?
如 scroll、click、reload等高频率的触发事件,会过度损耗页面性能,导致页面卡顿,页面抖动。有时我们不希望在事件持续触发的过程中那么频繁地去执,。此时防抖和节流是比较好的解决方案。
两种策略的工作方式及区别
-
throttle
让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了规定的时间间隔,才能进行下一次该函数的调用
Throttle:好比一台自动的饮料机,按拿铁按钮,在出饮料的过程中,不管按多少这个按钮,都不会连续出饮料,中间按钮的响应会被忽略,必须要等这一杯的容量全部出完之后,再按拿铁按钮才会出下一杯。
常用于连续点击按钮只让第一次生效,用 throttle 操作符
-
debounce
触发事件后函数不会立即执行,而是在 n 秒后执行,如果在 n 秒内又触发了事件,则会重新计算函数执行时间(n 秒内连续点击只会在n秒后执行一次)
Debounce:一部电梯停在某一个楼层,当有一个人进来后,20秒后自动关门,这20秒的等待期间,又一个人按了电梯进来,这20秒又重新计算,直到电梯关门那一刻才算是响应了事件。
常用于搜索时文本不断变化导致调用多次接口 或 页面有多少个接口,每个接口获取数据后需要刷新UI,用 debounce 操作符即可