Throttle

Throttle enforces a maximum number of times a function can be called over time. For example, “execute this function at most once every 100 ms.” Throttle使得函数在规定时间间隔内(如100 ms),最多只能调用一次

Debounce

Debounce enforces that a function not be called again until a certain amount of time has passed without it being called. For example, “execute this function only if 100 ms have passed without it being called.” Debounce可以将小于规定时间间隔(如100 ms)内的函数调用,归并成一次函数调用。

应用场景

防止按钮重复点击

为了防止用户重复快速点击,导致冗余的网络请求、动画跳转等不必要的损耗

滚动拖拽等密集事件

可以在UIScrollView的滚动回调didScroll函数里打日志观察下,调用频率相当高,几乎每移动1个像素都可能产生一次回调,如果回调函数的计算量偏大很可能会导致卡顿,此种情况下就可以考虑使用Throttle降频。

文本输入自动完成

假如想要实现,在用户输入时实时展示搜索结果,常规的做法是用户每改变一个字符,就触发一次搜索,但此时用户很可能还没有输入完成,造成资源浪费。此时就可以使用Debounce的Trailing模式,在字符改变之后的一段时间内,用户没有继续输入时,再触发搜索动作,从而有效节省网络请求次数。

数据同步

以用户埋点日志上传为例,没必要在用户每操作一次后就触发一次网络请求,此时就可以使用Debounce的Traling模式,在记录用户开始操作之后,且一段时间内不再操作时,再把日志merge之后上传至服务端