防抖debounce
定义:触发事件后该事件在n秒内仅会执行一次,若在n秒内再次触发,则重新计算时间
应用场景
- 假设在浏览器窗口resize时执行某个方法,并不需要在拉动窗口时不断执行该方法,而是在拉动停止后执行,则可以通过防抖实现
- 例如在百度搜索时,每次输入之后都有联想词弹出,这个控制联想词的方法不是输入框内容一改变就触发的,而是当你结束输入一段时间之后才会触发,如果在这短暂的时间段内一直在输入词语,则重新计算这段时间且不执行方法。
节流throttle
定义:触发事件,在n秒内只会执行一次
应用场景
- 假设提交表单避免用户反复点击导致重复提交,一方面加遮罩,另一方面可以通过节流进行限制,在n秒内点击了很多次只响应一次
- 懒加载时监听计算滚动条的位置,不必每次滑动都触发,可以降低计算的频率