防抖(debounce)和节流(throttle)的优化方法
创作时间:
作者:
@小白创作中心
防抖(debounce)和节流(throttle)的优化方法
引用
CSDN
1.
https://blog.csdn.net/qq_37268201/article/details/139456606
防抖(debounce)和节流(throttle)是两种常用的优化方法,用于减少高频事件(如滚动、输入、鼠标移动等)触发的函数执行次数,从而提高页面性能。
防抖(debounce)
防抖的原理是在一定时间内,无论触发多少次事件,都只执行一次目标函数。当事件停止触发后,等待一定时间后再执行目标函数。这种方式适用于输入内容验证、搜索等场景,可以有效避免因频繁触发而导致的性能问题。
特点:
- 减少了函数执行次数
- 延迟一定时间后执行
- 适用于输入内容验证、搜索等场景
代码实现:
function debounce(func, wait) {
let timeout;
return function() {
const context = this;
const args = arguments;
const later = function() {
timeout = null;
func.apply(context, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
// 使用示例
const inputChange = debounce(function() {
console.log('input changed');
}, 300);
document.getElementById('input').addEventListener('input', inputChange);
节流(throttle)
节流的原理是在一定时间内,只允许目标函数执行一次。当事件触发时,如果距离上次执行的时间超过设定的阈值,则执行目标函数。这种方式适用于滚动、窗口大小改变等场景,可以有效降低函数执行频率,提高性能。
特点:
- 减少了函数执行次数
- 在规定时间内只执行一次
- 适用于滚动、窗口大小改变等场景
代码实现:
function throttle(func, wait) {
let lastTime = 0;
return function() {
const now = Date.now();
if (now - lastTime > wait) {
lastTime = now;
func.apply(this, arguments);
}
};
}
// 使用示例
const scrollHandler = throttle(function() {
console.log('window scrolled');
}, 300);
window.addEventListener('scroll', scrollHandler);
总结
- 防抖适用于输入内容验证、搜索等场景,延迟一定时间后执行目标函数。
- 节流适用于滚动、窗口大小改变等场景,在规定时间内只执行一次目标函数。
- 它们的实现都是通过控制函数执行的时机来达到优化性能的目的。
热门推荐
上海居民医疗保险参保指南
头部摔伤:何时排除颅内出血?实用指南
风铃的风水作用与摆放位置
染色体异常有什么症状?能治好吗?
博弈论下的核潜艇死亡游戏
早晨起来眼睛干涩怎么回事
秦国早期的币制演变:从圜钱到圆形方孔钱
商务谈判如何把握眼神交流
幽门螺杆菌 (HP) ——知“幽”理、解“幽”愁
如何选择房产投资区域?房产投资区域选择有哪些策略?
3分钟掌握婴儿按摩三大绝招:助眠又防胀气便秘
新生儿肠绞痛的原因及应对方法
扁桃体发炎吃药能好吗
和田玉与黑曜石哪个更好?比较二者的优缺点及适宜佩戴场合
老北京爆肚是牛肚还是羊肚?
痛风不能吃什么食物?痛风患者要远离高嘌呤食物
葵花种子的种植方法
项目如何写文档内容模板
回转窑石灰窑的窑温控制如何实现?有哪些技巧?
男子错认“亲爹”16年后寻亲成功,一家人要求“假爹”公开道歉
急性心肌梗死的“警报”
八厘利息计算指南:方法、应用及注意事项全解析
对门邻居因一粪坑闹到上访|村庄环境整治中的矛盾调解何以进行
熟地黄和生地黄的区别的功效与作用?
椒江区基本概况
八字命理学与十二星座:理论基础、分析方法与预测范围的全面对比
车顶内饰布脱落的修复方法及其对车辆内部美观的影响
什么是内啡肽?这种大脑自产的“快乐激素”如何影响我们的身心健康
深度学习模型剪枝基础原理总结
夜景拍摄为何建议使用多帧降噪