前端性能优化——防抖(debounce)
定义:一个需要频繁触发的函数,在规定时间内只让最后一次生效,前面的不生效
二、使用场景:在最近写项目时,遇到一个搜索框模块,搜索框要求根据内容实时搜索内容,下边是一个内容列表(由于是公司的项目就不放图片了),这样就需要监听键盘的keyup事件,在每次触发事件时去进行ajax请求,可是这样就要不断的去请求数据,去调用接口,很显然,这样做出于性能优化角度很不好,于是小编就很机智的写了一个防抖函数(debounce)。
三、代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button >click</button>
<script>
var obtn=('btn1');
function debounce(fn,delay){
var timer=null;//利用闭包存入内存
return function f(){
clearTimeout(timer);
timer=setTimeout((function () {
(this);
}).bind(this),delay)
}
}
=debounce(function () {
(());
(this);
},600);
//this指向问题,
</script>
</body>
</html>
四、原理
其实原理很简单,主要涉及到三个知识点(注意听):
利用setTimeout()特性实现延时触发,通过delay来控制延时时间
利用闭包原理将timer存在内存之中
this指向问题,定时器内的this是指向window的,所以要通过call()方法来改变其this指向,大家如果不理解上边的可以直接写(obtn),也是可以的。
下一篇来给大家讲一讲防抖函数的亲兄弟节流(throttle)函数吧!!!