防抖和节流

一、 什么是防抖

        防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。

        (最后一次触发生效)*****

       应用场景:

       用户在输入框中连续输入一串字符时,可以通过防抖策略,只在输入完后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源。典型的案例就是窗口大小的变化、模糊查询

例:





    
    
    Document
    



 

或者用_.debounce(func, [wait=0], [options=])

_.debounce(func, [wait=0], [options=])

         创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。

         注意: 如果 leading 和 trailing 选项为 true, 则 func 允许 trailing 方式调用的条件为: 在 wait 期间多次调用防抖方法。

         如果 wait 为 0 并且 leading 为 false, func调用将被推迟到下一个点,类似setTimeout为0的超时。

参数:

         1.func (Function): 要防抖动的函数。

         2.[wait=0] (number): 需要延迟的毫秒数。

         3.[options=] (Object): 选项对象。

         4.[options.leading=false] (boolean): 指定在延迟开始前调用。

         5.[options.maxWait] (number): 设置 func 允许被延迟的最大值。

         6.[options.trailing=true] (boolean): 指定在延迟结束后调用。

返回:

        (Function): 返回新的 debounced(防抖动)函数。


 

lodash.min.js在Lodash 简介 | Lodash中文文档 | Lodash中文网上下载

二、什么是节流

       节流策略(throttle),顾名思义,可以减少一段时间内事件的触发频率。单位时间内,频繁触发事件,只执行一次    触发:有一个任务还在,取消触发(后两次取消)不会被打断

       (第一次触发生效)*******

       应用场景:

       懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费 CPU 资源。典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效,用户登录

       鼠标移动 mousemove    页面尺寸缩放resize   滚动条滚动scroll

例:


    

三、函数防抖和函数节流的对比

不管是函数节流还是函数防抖,减少的都是事件处理程序的调用频率,而不是时间的调用频率。

四、手写防抖和节流函数





    
    
    Document
    



    
    

你可能感兴趣的:(javascript,前端,css)