节流和防抖

节流:一段时间内,只执行一次某个操作,过了这段时间,还有操作的话,继续执行新的操作
使用场景:
1)页面滚动加载:在无限滚动的页面中,滚动事件会频繁触发,使用节流可以控制数据加载的频率,防止短时间内多次加载数据,提高页面加载性能
2)按钮防重复点击:当用户点击按钮执行某个操作时,使用节流可以确保按钮在一定时间内只能触发一次,防止用户重复点击造成误操作。

<div class="box" style="width: 100px;height: 100px;background: skyblue" draggable="true"></div>
<script>
// 节流: 一段时间内, 只执行一次某个操作,过了这一段时间,还有操作的话 继续执行新的操作
function throttle(fn){
   let timer = null;
   return function(){
       if(timer){
           return;
       }
       timer = setTimeout(()=>{
           fn();
           timer = null;
       },200)
   }
}

const boxDom = document.querySelector('.box');
boxDom.addEventListener('drag',throttle(function(e){
   console.log('drag===========');
}))
</script>

防抖:就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
使用场景:
1)搜索框实时搜索:在搜索框中输入关键词时,防抖可以延迟请求发送,只在用户输入完成或者停顿一段时间后才触发实际的搜索请求,避免频繁的网络请求。
2)窗口大小调整:当用户调整浏览器窗口大小时,窗口大小变化事件会连续触发,使用防抖可以确保只在用户完成调整后再执行相应的响应逻辑,以避免过多的布局计算。

    function debounce(fn,delay){
        let timer = null;
        return function(){
            clearInterval(timer);
            timer = setTimeout(()=>{
                fn.apply(this,arguments);
            },delay)
        }
        

    }    
    const inputDom = document.querySelector('.ipt');
    // inputDom.addEventListener('input', function(){
    //     console.log('wwwwwwwwwwww0');
    // })
    inputDom.addEventListener('input', debounce(function(e){
        console.log('this---',this);
        console.log('e---',e);
        console.log('发送搜索请求')
    },500))

防抖和节流在不同的应用场景中展现出其重要性。防抖适用于需要等待用户操作完成或者停顿后才进行相应处理的情况,如搜索框实时搜索和窗口大小调整。节流则适用于需要限制事件触发频率的情况,如页面滚动加载和按钮点击。根据具体需求,选择合适的技术可以优化用户体验、减少不必要的资源消耗,从而提升前端应用的性能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 节流(throttle)与防抖(debounce) 场景 因频繁执行DOM操作,资源加载等行为,导致UI停顿甚至浏...
    学编程的小屁孩阅读 504评论 0 0
  • 在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负...
    陈光环_18阅读 212评论 0 0
  • 在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负...
    iqing2012阅读 813评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,603评论 28 53
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,784评论 3 8