RXSwift 中的节流(Throttle) 与 防抖(Debounce)

为什么要防抖节流?

如 scroll、click、reload等高频率的触发事件,会过度损耗页面性能,导致页面卡顿,页面抖动。有时我们不希望在事件持续触发的过程中那么频繁地去执,。此时防抖和节流是比较好的解决方案。

两种策略的工作方式及区别

  1. throttle
    throttle

    让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了规定的时间间隔,才能进行下一次该函数的调用

Throttle:好比一台自动的饮料机,按拿铁按钮,在出饮料的过程中,不管按多少这个按钮,都不会连续出饮料,中间按钮的响应会被忽略,必须要等这一杯的容量全部出完之后,再按拿铁按钮才会出下一杯。

常用于连续点击按钮只让第一次生效,用 throttle 操作符

  1. debounce
    debounce

    触发事件后函数不会立即执行,而是在 n 秒后执行,如果在 n 秒内又触发了事件,则会重新计算函数执行时间(n 秒内连续点击只会在n秒后执行一次)

Debounce:一部电梯停在某一个楼层,当有一个人进来后,20秒后自动关门,这20秒的等待期间,又一个人按了电梯进来,这20秒又重新计算,直到电梯关门那一刻才算是响应了事件。

常用于搜索时文本不断变化导致调用多次接口 页面有多少个接口,每个接口获取数据后需要刷新UI,用 debounce 操作符即可

参考资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容