JavaScript防抖与节流的实现与注意事项

 更新时间:2022年03月31日 10:23:30   作者:_雪菜肉丝面_  
防抖和节流严格算起来应该属于性能优化的知识,但实际上遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死,下面这篇文章主要给大家介绍了关于JavaScript防抖与节流的实现与注意事项,需要的朋友可以参考下

概念

防抖:点击N次提交按钮,只有最后一次会发出请求。减少无效请求的次数。

节流:每点击一次按钮,都会失效一段时间。降低触发的频率。

实现

/*
防抖
时限内,只有最后一次调用会执行
*/
function debounce(func, interval = 0) {
	let timer;
	return function () {
		if (timer) {
			clearTimeout(timer);
		}
		timer = setTimeout(() => {
			func()
		}, interval)
	}
}
/*
节流
执行之后会失效一段时间
*/
function throttle(fn, interval=0, immediate=true) {
	let valid = true
	return function () {
		if (!valid) {
			return
		}
		valid = false
		if (immediate) {
			fn()
			setTimeout(() => {
				valid = true;
			}, interval)
		} else {
			setTimeout(() => {
				fn()
				valid = true;
			}, interval)
		}
	}
}

测试

function say() {
	console.log(1)
}
var a = debounce(say, 1000)
var b = throttle(say, 1000)
var c = throttle(say, 1000, false)

<button onclick="a()">测试防抖</button>
<button onclick="b()">测试节流一</button>
<button onclick="c()">测试节流二</button>

效果:

防抖。

节流,立即执行。

节流,延时执行。

注意事项

原理:闭包。每调用一次都会对应一个闭包。

不能够像下面这样写:

<button onclick="debounce(say, 1000)()">测试防抖</button>
<button onclick="throttle(say, 1000)()">测试节流一</button>
<button onclick="throttle(say, 1000, false)()">测试节流二</button>

不然:

总结

到此这篇关于JavaScript防抖与节流的实现与注意事项的文章就介绍到这了,更多相关JS防抖与节流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Three.js获取鼠标点击的三维坐标示例代码

    Three.js获取鼠标点击的三维坐标示例代码

    本篇文章主要介绍了Three.js获取鼠标点击的三维坐标示例代码。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具

    JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具

    本工具所有的功能实现都是由 ttp://jscompress.sinaapp.com/api 处理.(包括现在可以使用的这个在线压缩)
    2010-12-12
  • JavaScript小技巧整理

    JavaScript小技巧整理

    这篇文章主要介绍了JavaScript小技巧,整理汇总了JavaScript常用的6个实用技巧,属于JavaScript边角技巧的总结,需要的朋友可以参考下
    2015-12-12
  • JavaScript 数组中插入元素的实例方法

    JavaScript 数组中插入元素的实例方法

    这篇文章主要介绍了如何在 JavaScript 数组中插入元素,在本文中,我们学习了使用 splice() 方法将元素添加到数组的开始、末尾或任何位置的各种方法,需要的朋友可以参考下
    2023-09-09
  • JavaScript登录验证基础教程

    JavaScript登录验证基础教程

    这篇文章主要为大家详细介绍了JavaScript登录验证的基础教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 说明你的Javascript技术很烂的五个原因

    说明你的Javascript技术很烂的五个原因

    Javascript在互联网上名声很臭,但你又很难再找到一个像它这样如此动态、如此被广泛使用、如此根植于我们的生活中的另外一种语言。
    2011-04-04
  • JavaScript实现动态表格效果

    JavaScript实现动态表格效果

    这篇文章主要为大家详细介绍了JavaScript实现动态表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java中int与integer的区别(基本数据类型与引用数据类型)

    Java中int与integer的区别(基本数据类型与引用数据类型)

    这篇文章主要介绍了int与integer的区别(基本数据类型与引用数据类型),简单的说 int 是基本数据类型,integer 是引用数据类型,具体区别详解大家参考下本文
    2017-02-02
  • JavaScript实现定时页面跳转功能示例

    JavaScript实现定时页面跳转功能示例

    这篇文章主要介绍了JavaScript实现定时页面跳转功能,涉及javascript结合时间函数定时触发自定义函数功能操作技巧,需要的朋友可以参考下
    2017-02-02
  • Javascript中Promise的四种常用方法总结

    Javascript中Promise的四种常用方法总结

    这篇文章主要给大家总结介绍了关于Javascript中Promise的四种常用方法,分别是处理异步回调、多个异步函数同步处理、异步依赖异步回调和封装统一的入口办法或者错误处理,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论