防抖(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);
总结
- 防抖适用于输入内容验证、搜索等场景,延迟一定时间后执行目标函数。
- 节流适用于滚动、窗口大小改变等场景,在规定时间内只执行一次目标函数。
- 它们的实现都是通过控制函数执行的时机来达到优化性能的目的。
热门推荐
睡觉流口水,一件比口臭更尴尬的事
划船器的好处是什么 使用划船机健身锻炼注意事项有哪些
时隔21年再映,这部柯南剧场版如何借势二次元消费热?
糖与健康:如何减少糖的摄入以保持身体健康
生活中亦敌亦友的糖
市盈率大小对股票投资有何启示?这种启示在实际操作中如何应用?
车损险怎么计算保费?
商标策略:企业品牌建设的重要指南
人工智能如何改变企业运营:实际应用案例分析
膝关节骨性关节炎的13种运动疗法,你一定要知道
精准定位:如何实现目标市场的有效划分
产后梳头应注意哪些事项?坐月子可不可以梳头发
如何有效实现需求管理的目标和内容?
匿名举报传销电话号码:法律程序、注意事项及社会意义
自制观赏鱼饲料的配方分享:营养均衡的自制食物
低钾食物大全,肾衰竭及透析患者必备!
网络文学出圈更出彩
费孝通简介
德国公民教育模式及其对我国教育的借鉴意义分析
春天多陪孩子做4件事,忙也要做,孩子猛长个,身体变强壮
春天多陪孩子做4件事,忙也要做,孩子猛长个,身体变强壮
磁盘阵列方案,从RAID 0到RAID 10应该怎么选?
国道限速的意义与重要性:确保安全与提升通行效率的平衡
企业如何合法改变薪酬制度?这份指南请收好
这份冬季行车安全指南请查收!
全面解析声卡:提升音频体验与选择指南
青听 | 退役电竞选手的未来:如何打破商业价值困境?
糖尿病常用口服降糖药的正确使用时间,用错有风险
详解几种铁丝的知识!
家有院子,不管大小这七种果树都要种上一棵,好看好养还好吃