防抖与节流
-
防抖与节流的本质就是:通过闭包特性减少操作次数
-
举一个现实生活中的例子
// 两个大巴的故事
// 防抖,
// A大巴:车上上去一个人,五分钟之内不上人,发车。
// 节流。
// B大巴:车上上去一个人之后,五分钟之后发车。
// 发车!网络请求(A => B) 提高利用率 减少B的压力。
// 防抖:举个例子 从第一个字母开始,.5s 没有文字输入,发送请求。
// fn 具有防抖函数,wait 时间间隔, 返回的函数,跟fn具有同样的功能,具有防抖的特性,更多应用场景 鼠标移动,滚动条。
function debounce(fn, wait) {
let timer = null;
return function (...arg) {
clearTimeout(timer);
timer = setTimeout(() => {
fn(...arg);
}, wait);
}
}
var input = document.getElementById('inp');
function ajax (e) {
console.log('发送数据'+ e.target.value);
}
input.oninput = debounce(ajax, 500)
// 节流。
// fn要执行,等待wait时间后在执行fn
function throttle(fn, wait) {
let timer = null;
// 返回函数执行:车上人
return (...arg) => {
// 如果没有开启定时器,开启一个
if (!timer) {
// 到时间发车
timer = setTimeout(function () {
fn(...arg);
timer = null;
}, wait);
}
}
}
var _ajax = throttle(ajax, 2000);
input.oninput = _ajax
本文作者:HuangBingQuan
本文链接:https://www.cnblogs.com/bingquan1/p/18014713
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步