函数防抖、函数节流(性能)

函数防抖(debounce)

某个函数执行后开始计时,到指定时间之后才开始执行想要执行的函数

通俗点讲,就是通过SetTimeout设置毫秒时间,在触发事件后,n秒内没有再次触发事件,处理函数才会执行,如果在这一段时间来到之前,又一次触发了事件,那就重新计时。

  • 例子

    例子中是利用了echart图标插件来展示的一个统计图,在浏览器窗口改变大小时,我们需要实时的改变图表的大小,使得图表始终居中完整的平铺在浏览器中。
  1. 监听浏览器的resize
 window.addEventListener('resize',debounce (pageResize, 200));
  1. 改变图表的大小
function pageResize() {
	MyChart.resize();
}
  • 函数防抖(利用setTimeout()特性实现延时触发,通过delay来控制延时时间)
function debounce (fn, delay) {
    let handle;
    return function (e) {
        // 取消之前的延时调用
        clearTimeout(handle);
        handle = setTimeout(() => {
           fn();
        }, delay);
    }
}

连续的事件,只需触发一次回调的场景有:

  • 搜索框搜索输入。只需用户最后一次输入完,再发送请求
  • 手机号、邮箱验证输入检测
  • 窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染

函数节流

一个函数执行一次后,只有大于设定的执行周期后才会执行第二次

  • 浏览器scroll事件
window.addEventListener('scroll',throttle(realFunc,100));
  • 控制台打印num
var num = 0;
function realFunc() {
	console.log(num++);
}
  • 函数节流
var start = 0;
function throttle(func, time) {
	if (!start) {
		start = Date.now();
	}
var delay = Date.now();
if (delay - start > time) {
	func();
	start = 0;
	}
}

间隔一段时间执行一次回调的场景有:

  • 滚动加载,加载更多或滚到底部监听
  • 谷歌搜索框,搜索联想功能
  • 高频点击提交,表单重复提交

总结

节流函数不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而防抖动只是在最后一次事件后才触发一次函数。

推荐学习文档:函数的防抖节流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值