什么是throttle和debounce

作者: Harlen_luan | 来源:发表于2018-09-28 11:53 被阅读76次

debounce 函数防抖
_.debounce(func, delay, immediate);

第一次触发后,进行倒计wait毫秒,如果倒计时过程中有其他触发,则重置倒计时,且清除执行器;直到定时器制定完才会执行fn。如果wait毫秒内不断有触发,则一直不会执行,直到停止触发。用它来丢弃一些重复的密集操作、活动,直到流量减慢。例如:

  • 对用户输入的验证,不在输入过程中就处理,停止输入后进行验证足以;
  • 提交ajax时,不希望1s中内大量的请求被重复发送。

throttle 函数节流
_.throttle(func, delay, options);

第一次触发后先执行fn(当然可以通过{leading: false}来取消),然后wait毫秒后再次执行,在单位wait毫秒内的所有重复触发都被抛弃。即如果有连续不断的触发,每wait ms执行fn一次。与debounce相同的用例,但是你想保证在一定间隔必须执行的回调函数。例如:

  • 对用户输入的验证,不想停止输入再进行验证,而是每n秒进行验证;
  • 对于鼠标滚动、window.resize进行节流控制。

example: (用户在不停的滚动页面中,会输出不同的结果)

window.onload = function() {
    //用户不停的滚动页面,不会输出,直到你停止滚动,1s后输出一次(整个过程仅输出一次)
    window.addEventListener('scroll', _.debounce(function() {
        console.log(111);
    }, 1000))
    
    //用户不停的滚动页面,每隔1s输出一次(整个过程输出多次)
    window.addEventListener('scroll', _.throttle(function() {
        console.log(222);
    }, 1000))
}

相关文章

网友评论

    本文标题:什么是throttle和debounce

    本文链接:https://www.haomeiwen.com/subject/mrynbftx.html