博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js的防抖和节流
阅读量:6983 次
发布时间:2019-06-27

本文共 1207 字,大约阅读时间需要 4 分钟。

在前端开发中,频繁的触发事件执行,对于dom操作、资源加载等耗费性能的处理,很可能导致界面卡顿,甚至浏览器的崩溃。函数节流(throttle)和函数防抖(debounce)就是为了解决类似需求应运而生的

1.防抖

函数防抖就是在函数需要频繁触发情况时,只有足够空闲的时间,才执行一次,

如下图

防抖应用比较多是实时搜索,没有防抖的例子如下

    复制代码

可以看到,只想搜索nba,却连续搜索了n,nb,nba。没有防抖会浪费许多浏览器资源

现在加上防抖

oninput = debounce(handle,1000);//handle是我们要执行的事件函数,1000是要空暇1000msfunction debounce(handle,delay){    let timer = null;//用来记录定时器    return function(){
//返回触发事件执行的函数 let _self = this;//用来指向触发事件的dom对象 let arg = arguments;//用来指向触发事件的事件对象 //每次返回函数都要将之前的定时器清楚 clearTimout(timer); timer = setTimerout(function(){ handle.applay(_self,[arg]) },delay) //es6则可以不用去声明_self与arg timer=setTimeout(()=>{ //箭头函数没有this和arguments,这里的this和arguments全都是外部函数的 handle.apply(this,arguments) },delay) }}function handle(e){ ajax(this.value); console.log("事件对象:"+e)}function ajax(value) { console.log(value)}复制代码

效果如下:

2.节流

函数节流就是预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。如下图

节流应用比较多是发送ajax请求,频繁的ajax请求会降低浏览器性能,所以在一各周期内只能发送一个请求是最好的

发送了几次ajax请求
0
复制代码

效果如下

如果不加节流,就会发送成百上千次ajax请求 ,加了节流,便使得浏览器资源不会被无意义的消耗

结语

因为本人水平有限,如果有错漏的地方,还请看官多多指正

本文作者胡志武,写于2019/6/03,如果要转载,请注明出处,

如果觉得写的不错, 请点个赞吧

你可能感兴趣的文章
java中比较字符串的大小用String的compareTo()
查看>>
plist使用
查看>>
Linux RAR 安装和使用
查看>>
【OC】【一秒就会】【collectionView 头部吸住功能】
查看>>
51CTO下载 好资料分享
查看>>
linux 下转换UTC到本地时间
查看>>
Linux的起源与各发行版的基本知识
查看>>
单播包、广播包、组播包、洪泛包
查看>>
23种设计模式之解释器模式
查看>>
iptables命令结构之命令
查看>>
RabbitMQ之Exchange分类
查看>>
综合布线系统的构成
查看>>
计算机硬件 — 计算机简介
查看>>
关于重写session实现的时候可能会导至nginx 502的问题
查看>>
7z(p7zip)压缩软件在Linux下的安装和使用
查看>>
jetbrick-template 1.1.0 发布,支持 #tag, #macro, layout
查看>>
TCP的六个控制位
查看>>
numpy库中的extend()函数使用
查看>>
进制转换
查看>>
我的友情链接
查看>>