防抖和节流(自己的理解)

防抖是指连续触发的时候只会执行一次,停止触发 N 秒后才能继续执行,而节流是指如果你持续触发事件,每隔一段时间,只执行一次事件。像防止按钮多次点击就用防抖,像是监听滚动事件就用节流。

防抖场景

  • 即时搜索,一个输入框,改变值后进行搜索,要用防抖,例如500ms,我输一个单词 word 后500ms内没有再输入的话,执行搜索,避免输一个句子搜索N遍(搜索框搜索输入。只需用户最后一次输入完,再发送请求)
  • 手机号、邮箱验证输入检测
  • 窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。

节流场景

  • 节流还能用在刷新上,有的人猛点刷新,但为了服务器考虑,我们只在每一秒刷新一次,做节流,就算他一秒点100次我们也只刷新1次
  • 滚动加载,加载更多或滚到底部监听
  • 谷歌搜索框,搜索联想功能
  • 高频点击提交,表单重复提交

区别

  • 防抖只有停止操作后才执行1次
    防抖1秒,我连续点按钮10秒,在11秒的时候,执行一次
  • 节流是每隔固定时间执行一次
    节流1秒,我连续点按钮10秒,每秒执行一次,共执行10次
    <div id="box"></div>
    <br>
    <button id="btn">测试</button>

    <script>
        // 防抖
        var timer;
        box.onmousemove = function () {
            clearTimeout(timer)
            timer = setTimeout(function () {
                console.log("1")
            }, 1000);
        }

        //节流
        var lastTime = 0;
        btn.onclick = function () {
            var nowTime = new Date().getTime();
            if (nowTime - lastTime > 1000) {
                console.log("2")
                lastTime = nowTime;
            }
        }
    </script>

封装防抖

    var myApp=fangdou(add,1000)
        
        box.onmousemove = event=>{
            myApp(event.clientX,20)
        }

        function add(a, b) {
            console.log(a + b)
        }
        function fangdou(fn, time) {
            var timer;
        
            return function () {
                clearTimeout(timer)
                var arg=arguments;
                timer = setTimeout(function () {                
                    fn.apply(this, arg)             
                }, time);
            }

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

推荐阅读更多精彩内容

  • 前言 props与state都是用于组件存储数据的一js对象,前者是对外暴露数据接口,后者是对内组件的状态,它们决...
    itclanCoder阅读 6,478评论 0 0
  • 一、什么是防抖和节流 Ps: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜...
    拾柒_aab0阅读 1,937评论 0 1
  • 防抖和节流 相同:在不影响客户体验的前提下,将频繁的回调函数,进行次数缩减.避免大量计算导致的页面卡顿.不同:防抖...
    CodeMT阅读 2,806评论 0 2
  • 一.什么是函数防抖&节流 函数防抖函数防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被触...
    王蕾_fd49阅读 3,188评论 0 1
  • 本篇课题,或许早已是烂大街的解读文章。不过春招系列面试下来,不少伙伴们还是似懂非懂地栽倒在(~面试官~)深意的笑容...
    以乐之名阅读 5,737评论 0 9