防抖和节流以及应用场景

防抖 是将多次执行变为最后一次执行,比如百度搜索,就应该用防抖,当我连续不断输入时,不会发送请求;当我一段时间内不输入了,才会发送一次请求;如果小于这段时间继续输入的话,时间会重新计算,也不会发送请求。

应用场景:输入框


节流 是将多次执行变成每隔一段时间执行调用一次函数,而不是一触发事件就调用一次,这样就会减少资源浪费。

应用场景:比如窗口调整、页面滚动、抢购和疯狂点击等会用到节流。

节流与防抖的区别:
节流与防抖的前提都是某个行为持续地触发,不同之处只要判断是要优化到减少它的执行次数还是只执行一次就行。

在前端开发中,防抖节流是两种常用的优化技术,用于处理用户频繁触发的事件,避免性能问题,提升用户体验。以下是它们常见的应用场景: ### 防抖应用场景 - **搜索提示**:在搜索框输入时,通过 `input` 的 `input` 事件发送请求数据是很频繁的操作。使用防抖技术,可避免用户在输入过程中不断发送请求,而是在用户停顿或停止输入一段时间后才触发请求,减少不必要的请求次数,降低服务器压力。例如: ```javascript // 防抖debounce代码 function debounce(fn, delay) { let timeout = null; return function() { // 每当用户输入的时候把前一个 setTimeout clear 掉 clearTimeout(timeout); // 然后又创建一个新的 setTimeout,这样就能保证 interval 间隔内如果时间持续触发,就不会执行 fn 函数 timeout = setTimeout(() => { // 使用箭头函数不用保存 this fn.apply(this, arguments); }, delay || 500); }; } // 模拟搜索请求 function searchRequest(query) { console.log(`Searching for: ${query}`); } const input = document.getElementById('search-input'); input.addEventListener('input', debounce((e) => { searchRequest(e.target.value); }, 300)); ``` - **窗口大小调整**:当用户调整浏览器窗口大小时,`resize` 事件会频繁触发。使用防抖可以确保只有在用户停止调整窗口一段时间后,才执行相应的布局调整或重新计算操作,避免频繁的重排重绘,提升性能 [^2][^3]。 - **按钮点击**:防止用户在短时间内多次点击按钮,例如提交表单按钮。使用防抖可以确保只有最后一次点击才会触发提交操作,避免重复提交数据 [^1]。 ### 节流应用场景 - **页面无限加载**:在页面的无限加载场景下,用户滚动页面时,需要每隔一段时间发一次 `Ajax` 请求,而不是在用户停下滚动操作时才去请求数据。使用节流技术可以保证在规定时间内一定会执行一次请求,避免频繁请求数据 [^1]。 ```javascript // 节流 throttle 代码 function throttle(fn, delay) { let timer = null; return function() { if (!timer) { fn.apply(this, arguments); timer = setTimeout(() => { timer = null; }, delay); } }; } // 模拟滚动加载数据 function loadMoreData() { console.log('Loading more data...'); } window.addEventListener('scroll', throttle(loadMoreData, 500)); ``` - **鼠标移动**:当鼠标移动时,`mousemove` 事件会频繁触发。在一些需要根据鼠标位置进行实时计算或更新的场景中,如绘图应用,使用节流可以控制计算更新的频率,避免性能问题 [^2]。 - **键盘输入**:在某些场景下,如游戏中的按键操作,需要控制按键事件的触发频率,避免玩家因快速按键导致游戏逻辑出现异常。使用节流可以确保按键事件在一定时间内只触发一次 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值