首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript函数节流和函数防抖之间的区别

一、概念解释 函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段。  大家大概都知道旧款电视机的工作原理,就是一行行得扫描出色彩到屏幕上,然后组成一张张图片。...既能节省浏览器CPU资源,又能让页面浏览更加顺畅,不会因为js的执行而发生卡顿。这就是函数节流和函数防抖要做的事。 函数节流是指一定时间内js方法只跑一次。比如人的眨眼睛,就是一定时间内眨一次。...这是函数节流最形象的解释。 函数防抖是指频繁触发的情况下,只有足够的空闲时间,才执行代码一次。比如生活中的坐公交,就是一定时间内,如果有人陆续刷卡上车,司机就不会开车。...理解了函数节流的关卡设置重点,其实改起来就简单多了。 三、函数防抖 函数防抖的应用场景,最常见的就是用户注册时候的手机号码验证和邮箱验证了。...; }, 300); }; 函数防抖的要点,也是需要一个setTimeout来辅助实现。

1.1K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    防抖和节流函数

    ​防抖当很频繁地(在设置的事件内)触发某一个回调的时候,只执行最后一次触发的回调。...应用场景:用户持续点击某一按钮(抢购某一商品)// 防抖函数接收一个函数和延时时间function debounce(fun, delay) {// 1.设置一个定时器变量var timer = null...);}, delay)}}function fn() {console.log('sss')}window.addEventListener('scroll', debounce(fn, 2000))节流如果持续触发事件...- preTime >= delay){func()// 将当前时间赋值给preTime 作为上一次执行的时间,以此来判断上一次和下一次执行的时间间隔preTime = now}}}function...一开始执行就会有延迟,而使用时间戳的方式当第一次触发回调会立即执行函数的防抖与节流都是优化性能的一种方式,目的都是,降低回调函数的执行频率,节省计算资源。​

    22000

    函数防抖和节流

    函数防抖(debounce) 防抖:不管事件触发频率多高,一定在事件触发 n 秒后才执行,如果在一个事件执行的 n秒内又触发了这个事件,就以新的事件的时间为准,n秒后才执行,总之,触发完事件 n 秒内不再触发事件...搜索输入框,在输入后200毫秒搜索 debounce(fetchSearchData, 200); 可以这样去理解记忆:函数防抖是 在事件触发 n 秒后才执行,在监听 scroll事件和 resize...函数节流(throttle) 函数节流:不管事件触发频率有多高,只在单位时间内执行一次。...[1] JavaScript专题之跟着 underscore 学节流[2] 防抖和节流[3] 参考资料 [1]JavaScript专题之跟着underscore学防抖: https://github.com.../26 [3]防抖和节流: http://www.conardli.top/docs/JavaScript/%E9%98%B2%E6%8A%96.html

    55910

    js实现函数防抖与节流

    概念理解 防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。 节流:规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。...js函数防抖与节流的区别: 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。...个人踩坑 1、通过理解函数防抖与函数节流的概念后,使用闭包实现函数防抖和节流,没有考虑到对于节流,如果用户在下一次请求之前已输入完毕,但是此时不会再进行请求,则会导致最后输入的文字获取其他事件改变不发请求...id="debounce"> // 函数防抖节流...} function debounce(func,delay){ console.log("函数防抖") let timer = null; return function(..

    1.4K10

    函数的防抖与节流

    ,浏览器奔溃,页面空白等情况 而解决这一问题的,正是函数节流与函数防抖 函数节流 定义: 节约(减少)触发事件处理函数的频率,连续每隔一定的时间触发执行的函数,它是优化高频率执行一段js代码的一种手段...,这个时候就用到函数防抖了的 表单的多次提交,百度搜索等都是用的防抖实现的 小结: 共同点: 都是解决频繁操作触发事件处理函数,引起页面卡顿,不流畅等性能问题,都是通过设置延时计时器逻辑来提升性能,以减少...http请求次数,节约请求资源 不同点:函数节流,间隔时间内执行事件处理函数,而函数防抖,一定时间间隔内只执行最后一次操作 直接引入lodash库 如果自己不原生手动实现,可以直接安装yarn add...(函数节流,两种方式)或者太多次(函数防抖),分别用原生JS以第三方库实现 对于函数的节流与防抖是前端提升性能的手段,虽然就几行代码,但是面试时,常问不衰,让你手写,很多时候,拍拍胸脯,不借助搜索,你还真不一定能写得出来...在实际的开发中,函数的节流与函数防抖也是比较频繁的,可见它的重要性不言而喻

    25820

    函数的节流与防抖

    概念 节流:事件触发后,规定时间内,事件处理函数不能再次被调用。也就是说在规定的时间内,函数只能被调用一次,且是最先被触发调用的那次。...防抖:多次触发事件,事件处理函数只能执行一次,并且是在触发操作结束时执行。...也就是说,当一个事件被触发准备执行事件函数前,会等待一定的时间,如果没有再次触发,那么就执行,如果被触发了,那就本次作废,重新从新触发的时间开始计算,并再次等待1秒,知道能最终执行。 2....使用场景 节流:滚动加载更多、搜索框搜索联想功能、高频点击、表单重复提交 防抖:搜索框搜索输入,并输入完成以后自动搜索;手机号,邮箱验证输入检测;窗口大小resize变化后,再重新渲染 3....dur) { fn.apply(self, arguments) last =+ new Date() } } } /* * 函数防抖

    56730

    防抖函数与节流函数

    函数防抖 定义:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行。 原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。...: 通过上面的例子,我们知道我们可以通过函数防抖,解决了多次触发事件时的性能问题。...比如,我们在监听滚动条位置,控制是否显示返回顶部按钮时,就可以将防抖函数应用其中。...但依然有些功能并不适用: 当我们做图片懒加载(lazyload)时,需要通过滚动位置,实时显示图片时,如果使用防抖函数,懒加载(lazyload)函数将会不断被延时, 只有停下来的时候才会被执行,对于这种需要实时触发事件的情况...下面开始介绍函数节流,通过设定时间片,控制事件函数间断性的触发。 函数节流 定义:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用。

    88930

    防抖函数与节流函数

    Contents 1 应用场景 2 防抖函数的封装 3 节流函数的封装 应用场景 实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如: 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮...通过监听 resize 事件,对某些自适应页面调整DOM的渲染(通过CSS实现的自适应不再此范围内) 通过监听 keyup 事件,监听文字输入并调用接口进行模糊匹配 … 防抖函数的封装 定义:多次触发事件后.../** * 防抖函数 * @param method 事件触发的操作 * @param delay 多少毫秒内连续触发事件,不会执行 * @returns {Function} */ export...(timer); timer = setTimeout(function() { method.apply(self, args); }, delay); }; }; 节流函数的封装.../** * 节流函数 * @param method 事件触发的操作 * @param mustRunDelay 间隔多少毫秒需要触发一次事件 */ export const throttle

    36110

    节流函数和防抖函数的注意事项

    关于防抖和节流函数的详细分析请看以下两篇文章,此处不再重述,本文章主要讲述运用过程中出现的问题 https://www.cnblogs.com/zhouyangla/p/9065554.html防抖函数...https://www.cnblogs.com/zhouyangla/p/9096832.html节流函数 防抖 触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 思路...'); test.onclick=debounce(sayHi); // 防抖 节流 高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率 思路: 每次触发事件时都判断当前是否有等待执行的延时函数...html如防抖 js代码: function throttle(fn) { let canRun = true; // 通过闭包保存一个标记 return function (...这样写当然没有什么问题,这也是这两个函数的标准写法,但是博主在第一次测试这两个函数时用的是直接在DOM元素上绑定事件的方法,下面以防抖函数为例说明: html代码如下: <

    74230

    JS函数节流和防抖的区分和实现详解

    在写JS时,这两个函数比较常见,有时候傻傻分不清用哪个,或者说知道代码要怎么写,但要说出它究竟是节流函数还是防抖函数时一脸楞逼。...没到200ms,一定会返回,没有执行回调函数的。 主要应用场景有:scroll、touchmove 防抖概念(Debounce) 抖动停止后的时间超过设定的时间时执行一次函数。...jQuery(window).on('popstate', throttled.cancel); 防抖(debounce) 创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟...注意: 如果 leading 和 trailing 选项为 true, 则 func 允许 trailing 方式调用的条件为: 在 wait 期间多次调用防抖方法。...jQuery(window).on('popstate', debounced.cancel); 以上就是这篇节流和防抖的全部介绍。

    1.9K20

    手写节流防抖函数

    认识防抖和节流函数防抖和节流的概念最早不是出现在软件工程中,防抖是出现在电子元件中,节流是出现的流体流动中。...而javascript是事件驱动的,大量的操作会触发事件,加入到事件队列中处理而对于某些频繁的事件处理会造成性能的损耗,我们就可以通过防抖和节流来限制事件频繁的发生1.1....认识防抖debounce函数场景:在实际开发中,常常会碰到点击一个按钮请求网络接口的场景,这时用户如果因为手抖多点了几下按钮,就会出现短时间内多次请求接口的情况,实际上这会造成性能的消耗,我们其实只需要监听最后一次的按钮...这就是防抖函数使用的场景总结防抖函数的逻辑当事件触发时,相应的函数并不会立即触发,而是等待一定的时间;当事件密集触发时,函数的触发会被频繁的推迟;只有等待了一段时间也没事件触发,才会真正的响应函数1.2...这就是节流函数的使用场景总结节流函数的逻辑当事件触发时,会执行这个事件的响应函数;如果这个事件会被频繁触发,那么节流函数会按照一定的频率来执行;不管在这个中间有多少次触发这个事件,执行函数的频繁总是固定的

    37520

    防抖和节流的区别

    防抖(debounce)和节流(throttle)是两种不同的优化方法,它们都是为了控制函数的执行频率。防抖(debounce)防抖函数的目的是在一定时间内,多次调用函数只执行一次。...原理:通过延迟函数的执行,直到一段时间后没有新的调用请求,才执行函数。应用场景:搜索框输入时的自动搜索功能,窗口resize、scroll事件的处理函数等。...(throttle)节流函数的目的是在一定时间内,按照固定的频率执行函数。...); if (now - lastTime > wait) { func.apply(context, args); lastTime = now; } };}总结:防抖函数适用于需要在一定时间内只执行一次的场景...节流函数适用于需要按照固定频率执行的场景,在固定时间段内,多次调用,只有满足时间长度的才会执行,如滚动事件的处理函数。

    15010

    面试官:防抖和节流的区别是啥?实现一个防抖和节流函数

    一、为什么要防抖和节流? 我们在开发程序的过程中,可能会频繁的点击某一个事件,或者短时间内请求多次接口,对事件处理函数的频率没有进行限制,从而导致浏览器卡顿或者卡死,导致用户体验非常差。...防抖和节流函数就是为了限制函数的执行次数和 短时间内不必要多次执行函数,从而提高项目性能。...二、防抖 防抖就是事件触发n秒后再执行回调函数,但此时在n内,多次触发事件,则重新计时,保证代码只执行一次。...表单验证 按钮的提交事件 三、节流 当事件触发之后,约定单位时间之内,事件里面的代码最多只能执行 1 次。...所以,节流减少了单位时间内代码的执行次数,从而提高性能。

    64140

    函数节流与函数防抖

    节流与防抖的概念 函数节流与函数防抖的目的都是为了减少用户对服务器不必要的请求次数,以此提高服务器性能的函数。节流是在一段时间内,只向服务器请求一次。...防抖则是在频繁触发相同请求时,若任务之间间隔小于指定时间,那么只会执行最后一次请求。...这还只是算的1个用户,通过防抖我们将4次请求优化至1此请求。如果同时访问的是1万人,那么4万次请求和1万次请求差距就相当大了。 ? 根据上诉的问题,我们优化一下代码。 1....回顾概念 防抖的概念则是在任务之间间隔小于指定时间时,只会触发一次请求,那么这里的debounce函数还需要一个delay时间参数,涉及到时间,则需要一个添加一个定时器,接下来再次修改函数。...节流 思路:每次触发事件时都判断当前是否有等待执行的延时函数 和防抖一样,节流也是为了降低服务器的性能。不过节流时在一段时间内只执行一次函数。简单做一点修改,下面则是一个节流函数。

    53710

    JavaScript手写防抖和节流函数

    防抖 函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内事件又被触发 ,则重新计时。这可以使用在一些点击请求的事件,避免因用户的多次点击向后端发送多次请求。...应用场景 按钮提交场景:防止多次提交按钮,只执行最后提交的一次 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次还有搜索联想词功能类似生存环境请用lodash.debounce...null; } //设置定时器,使事件间隔指定时间后执行 timer=setTimeout(()=>{ fn.apply(context,args); },wait) } } 节流...节流是规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。...节流可以在scroll函数的事件监听上,通过事件节流来降低事件调用的频率。

    37020
    领券