防抖(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);
总结
- 防抖适用于输入内容验证、搜索等场景,延迟一定时间后执行目标函数。
- 节流适用于滚动、窗口大小改变等场景,在规定时间内只执行一次目标函数。
- 它们的实现都是通过控制函数执行的时机来达到优化性能的目的。
热门推荐
星露谷物语时间系统详解:如何利用时间提升游戏效率
常用的密封材料
哪些方法能缓解晨起困乏
海岸赛艇入选奥运会,古老的赛艇运动何以从河“划”向海?
咸鸭蛋的功效与作用、禁忌和食用方法
社保缴费指南:多种网上缴费方式详解
金融分析师就业中应该学会那些技能才能有更好的发展?
如何防止昏迷病人出现压疮
治疗压疮的常用药膏
电动车、三四轮车上什么牌照?考哪种驾照?上路注意事项,明确了
单轴VS双轴VS液压:如何选择合适的农用简易旋耕机?
出汗增多、胸闷、疲劳,可能你心律不齐,早期做好6个预防
日本启动第五轮核污水排海,如何防范?
量子计算+AI,打破药物研发瓶颈?
中国护照更新后,护照号码会发生变化吗?
中国护照更新后,护照号码会发生变化吗?
画画讲方法:谈怎样画好山水画
钱被骗了怎么办?及时行动+保留证据或能追回!
《少前2》出海首月收入破4亿,仅次于米哈游、比肩鹰角:获外媒盛赞
秦汉简牍中的日常行政与基层治理
秦汉简牍中的日常行政与基层治理
花少北为恋情风波道歉,承认之前立单身人设,但网友们却不买账
冬季用气安全问题,说亿遍也不够!
如何打造创意城市?16国代表交流经验,让文化和创意变成战略资产
如何保存奶油花【奶油糖霜】
第3次对决!美媒全方位对比快船独行侠,3-4,差距一目了然
什么是投资市场风险的识别和评估?如何降低投资市场风险?
古琴十大名曲:传统经典曲目
挖掘医疗大数据,实现精准医疗随访的科学化
未来建筑,生态与科技创新的融合设计理念