JS 节流
节流的意思是让函数有节制地执行 使用思想 最大负载量之前只能执行一次定义:在一定时间内,在动作被连续频繁触发的情况下,CD好之前只能用一次
参考:英雄联盟。
var r = function ( ) {
console. log ( "薇恩开启大招 一秒隐身 进入夜行 收割时刻" ) ;
} ;
function lolHeroskill ( fn, delay ) {
let cd = true ;
return function ( ) {
if ( cd) {
fn ( ) ;
cd = false ;
setTimeout ( ( ) => {
cd = true ;
} , delay) ;
} else {
console. log ( '我进来else里面了' )
}
} ;
}
const use = lolHeroskill ( r, 3000 ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
use ( ) ;
JS防抖
定义:在一定时间内,在动作被连续频繁触发的情况下,动作只会被执行一次。主要区别 节流是第一次 就已经把你截住了 就像英雄联盟的大招CD 第一下按马上截住防抖 是针对一段的时间的最后一次
function shuaka ( fn, delay ) {
let timerId = null
return function ( ) {
if ( timerId) { window. clearTimeout ( timerId) }
timerId = setTimeout ( ( ) => {
fn ( )
timerId = null
} , delay)
}
}
const startshuaka = shuaka ( ( ) => console. log ( '最后一个人上车了 公交可以开了' ) , 5000 )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
startshuaka ( )
最后 通俗语言解释 防抖节流
节流是无论如何都会执行函数的,只是会有条件判断.判断你的cd好了没有,好了才给你做你想做的事情要是你的cd没好,那就去下面吧,我不会给你执行的防抖是约束人性的,是一个厌世的机器人作为一个验票员.我无法反抗,必须完成工作,但我就是恶心你.所以你来人就给你进来,进多少都可以,但是只有最后一个人进了,我再等5秒再慢慢给你执行,这就是我的工作,没得商量.
区别:
节流的约束条件是cd是时间,数量不在我的考虑范围之内,多少都可以,但是一个条件,你的cd要好了才行;防抖的约束条件是The last"最后",没有cd时间这个概念,数量也不在考虑范围之内,都可以,但是我只认最后一个,最后一个我才会执行.我手上拿着秒表,进来一个我就重新计数,只有秒表走完,我才关门开车(执行函数).
联系:
节流和防抖都是避免你在一下操作太多太快,不同的是约束(判断)条件.节流会死板一些,我放你通过的条件是写死的,只要你达到了,就放你通过;而防抖是机器和用户的一个相互达成共识,妥协.你得等我一会儿,你给完我东西,我拿去检查一下,给点时间,你得信我,不要催我,你一旦催(重复操作)我,我就要重新来.
如何快速分别防抖/节流:
直接找代码,找是否有 机器和用户达成协议妥协的代码(通常是清除定时器 clearTimeout);如果有,就是防抖;