防抖(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);
总结
- 防抖适用于输入内容验证、搜索等场景,延迟一定时间后执行目标函数。
- 节流适用于滚动、窗口大小改变等场景,在规定时间内只执行一次目标函数。
- 它们的实现都是通过控制函数执行的时机来达到优化性能的目的。
热门推荐
一岁半宝宝每日饮食指南:三餐两点怎么吃?附具体食谱
后口动物揭秘:从寒武纪到现代脊椎动物的演化之路
小高层的居住优势有哪些?这些居住优势有怎样的体现?
女生初中毕业最吃香的专业,选择好未来的职业之路
炎陵县水口镇:红色热土今朝更好看
心理健康筛查工作方案及措施
运动时使用主动降噪耳机的安全与卫生指南
货车用尿素的作用与重要性
你被AI生成的假新闻骗过吗?起底AI造谣乱象
斯图加特地铁系统详解:历史、线路与未来发展
健康科普丨婴幼儿喘息性疾病高发的“罪魁祸首”—呼吸道合胞病毒
地黄丸家族的自白:8种地黄丸,你选对了吗?
中铁注册资本视频:揭秘中国中铁是如何在全球市场崛起的
最极端的减肥法:快速瘦身背后的健康隐患
军工:国家战略与未来挑战之深度融合的航天
吴广死后不久,陈胜随即被杀身亡,刘邦:追谥他为隐王,年年祭祀
如何通过数据增强提高AI缺陷检测的效果
道教五戒:道教徒必守的基本戒律
每天散步的人,后来都怎么样了?你将收获9个好处
上海火车站如何进站接送人?这份官方攻略请收好
如何进行软件产品的用户体验优化
钙在中年以后的重要性:为什么钙对成年及老年人很重要
牛顿与苹果:一个科学史上经久不衰的传奇
游戏或APP的个人开发者有什么变现的渠道
山西大学排名:软科、校友会历年排名数据汇总
新航路开辟的历史意义与影响
分步骤解析:如何将整盏燕窝巧妙分为两次烹饪指南
金管局计算机岗专业课面试命题思维与答题方式
亚冠16强战首回合:申花取胜捍卫中超荣誉,J联赛2队赢球占先机
藏在身边的天然解酒药——葛根