美文网首页JavaScript
防抖和节流(自己的理解)

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

作者: blank的小粉er | 来源:发表于2020-03-31 12:36 被阅读0次

防抖是指连续触发的时候只会执行一次,停止触发 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);
            }

        }

相关文章

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

    防抖是指连续触发的时候只会执行一次,停止触发 N 秒后才能继续执行,而节流是指如果你持续触发事件,每隔一段时间,只...

  • 2019-06-24 函数节流和函数防抖

    最近看了很多blog里介绍的函数节流和函数防抖,所以整理出一套较为简单,易理解的函数节流和函数防抖 函数节流:首先...

  • 防抖和节流理解

    防抖和节流都是某段时间间隔之内执行一次,但是具体表现不一样;防抖:点击按钮后500毫秒没有在点击过,则触发事件,否...

  • 防抖和节流理解

    一、什么是防抖和节流?为什么用? |--引入防抖和节流解决的问题:当一个函数被频繁、无限制的被调用的时候,会加...

  • 谈谈js中的节流和防抖函数

    关于节流和防抖,这篇文章说的很好了,深入lodash源码分析防抖和节流深入篇 | Lodash 防抖和节流是怎么实...

  • JavaScript防抖和节流

    1. 认识防抖和节流 1.1. 对防抖和节流的认识 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电...

  • 防抖 & 节流理解

    我比较疑问: 因为照理说 onscroll这个window对象上的属性只是获得return 函数(应该添加()才能...

  • 轻松理解防抖和节流

    防抖和节流在前端应用非常多,如搜索框,查询等操作,如何减少一些无效的操作,减轻服务器的压力,如一些持续发生的事件,...

  • 简单理解"防抖和节流"

    防抖(debounce): 概念: 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。 个人理解:...

  • (转载) 函数防抖节流的理解及在Vue中的应用

    (转载) 函数防抖节流的理解及在Vue中的应用 防抖和节流的目的都是为了减少不必要的计算,不浪费资源,只在适合的时...

网友评论

    本文标题:防抖和节流(自己的理解)

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