场景一
- 王者荣耀的普攻阈值是怎么实现的?
- 射击游戏里的攻击速度是怎么限制的?
- 怎样计算滚动条滚动位置,最多50ms 计算一次?
概念
函数节流
调节强制执行一段时间内可以调用函数的最大次数,如“每100毫秒最多执行一次”。
在正常情况下,我们可以在10秒钟内调用此函数1000次。如果每100毫秒将其限制为仅一次,则最多只能执行该功能100次。
函数节流的核心是,让一个函数不要执行得太频繁,减少一些过快的调用来节流。
例如上述场景中,游戏里的攻速限制,就是使用的函数节流的手段。
场景二
- 即时搜索的搜索框中,如何控制只在用户输入完成后触发ajax ?
函数去抖
强制一个函数在一段时间内只被调用一次。如“一个函数100毫秒内只执行一次”。
也许一个函数在很集中的时间内被调用1000次,超过3秒,然后停止调用。如果我们在100毫秒内将其去抖动,该函数将仅启动一次3.1秒。函数去抖就是对于一定时间段的连续的函数调用,只让其执行一次。
异同
相同点:都是为了处理性能问题而限制 UI 操作
就像一窝蜂的人去排队看演出,队伍很乱,看门的老大爷每隔1秒,让进一个人,这个叫throttle,如果来了这一窝蜂的人,老大爷一次演出只让进一个人,下次演出才让下一个人进,这个就叫debounce。