js中防抖和节流主要用来做一些性能方面的优化,这是一种思想,具体实现的方式可以有很多种,那么到底什么是防抖和节流和怎么去实现呢?
防抖:
可以将防抖比喻为游戏中的人物施放技能前的技能前摇,你必须要等到这个前摇结束才能把这个技能释放出来。
意思就是当我们想要去做一件事情的时候,想要在这段时间内只去做一遍,不想进行多遍的操作。例如在输入框内用户输入字符想要进行一个搜索的时候,每次输入一个字符都向服务器请求数据的话,那这对服务器的负荷是很大的,我们可能只想用户在完全输入完字符后才向服务器进行一个请求,那么这时候就可以用上防抖了。
具体实现代码:
function debounce(fun, delay) { //fun为你要执行的函数,delay为多长时间过后不再操作才能执行 let timer = null; return function (...args) { if (timer) clearTimeout(timer); //如果存在定时器就清除定时器,重新开始计算 timer = setTimeout(() => { fun.apply(this.args) //通过apply调用函数 }, delay) }; }
节流:
可以将节流比喻为游戏中的人物释放技能后的技能冷却时间,你要等待技能冷却才能进行下一次的释放。
意思就是我们在这段时间之内只能进行一次操作,下一次操作要在这段时间过后。例如用户在点击表单提交后,界面由于一些原因卡住了,也没有提示窗口弹出,用户在没有得到提示的情况下连续点击表单提交按钮,就会给服务器进行多次的重复提交,那么这时候就可以用上节流了。
具体实现代码:
function throttle(fun, delay) { //fun为你要执行的函数,delay为多长时间过后才能再次执行 let value = true; return function (...args) { if (value) { value = false; fun.apply(this.args); //通过apply调用函数 setTimeout(() => { value = true; //重新将value赋值为true }, delay) }else{ return false; } }; }