前端基本功(九):彻底理解函数节流与防抖,以及我是如何在日常开发中应用函数节流与防抖的。

  1. 如何理解函数节流与函数防抖

函数节流(throttle):从字面上理解,就是节约函数的执行次数(约定一定的时间执行一次),在我们进行一些高频执行函数的操作中可以应用。
函数防抖(debounce):从字面上理解,防止函数抖动,那么函数为什么会抖动?就是在我们还没有完全确认此刻操作的时候频繁执行函数,防抖就是合并我们的函数执行(多个欲执行函数到约定的时间点后再合并执行)。只有触发操作后超过指定的间隔说明这一次触发才有效,否则就要重新计时等待。

  1. 手动实现节流与防抖
  2. 函数节流

实现思路:利用定时器在第一次触发函数时打一个开关,代表我已经进入了倒计时,在指定的时间后会触发,但是你在这个指定的时间之前都通过判断这个开关是打开状态就无法再次触发函数,等到倒计时结束开关关闭,下次执行就可以再次进行倒计时操作。也就实现了约定一定的时间执行一次函数的操作。

简单代码实现:
function throttle(fn, delay = 500) {
let canRun = true;
return function() {
// 这里其实是使用了闭包的原理,函数内部保存使用了函数外部的变量。
if(!canRun) return;
canRun = false;
setTimeout(() => {
fn.apply(this, arguments);
canRun = true;
}, delay)
}
}
复制代码

  1. 函数防抖

实现思路:还是同样需要利用定时器,当我们执行这个函数时,会生成一个定时器,但是如果你重复执行这个函数,每次执行函数的第一步是清除上一次的定时器,这样就可以达成只有触发操作后超过指定的间隔说明这一次触发才有效,否则就要重新计时等待。

简单代码实现:
function debounce(fn, delay = 500) {
let timeout = null;
return function() {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, delay)
}
}
复制代码

  1. 我在开发中使用的案例

一般情况下,我们在日常开发中都会使用一些函数库比如说loadsh、underscore等。这些类库一般都已经封装好了throttle、debounce等函数,我们一般直接使用即可。
前段时间产品就提出了一个需求:我们只需要在一个输入框中输入一个客户的关键字,就可以模糊筛选中匹配指定的客户。如果说,我们只要监听onchange事件就请求后台接口匹配的数据即可。但是这样导致的问题是,用户仅仅还在输入法联想阶段或者是正在输入状态下,也会到此请求接口。那么这种情景下就可以使用我们debounce函数来进行优化。

// 案例一:这里使用了装饰器包装了loadsh中的debounce
@Debounce(300)
onSearch(name) {
this.props.dispatch({type: ‘sysUser/queryOrgUser’, payload: {
body: {
name,
role: USERROLE_TYPE.ACCOUNT_MANAGEMENT,
}
}});
}

// 案例二:这里直接用的loadsh的debounce包装了我们方法
const debounceCalculate = debounce(this.trialTranslateMoney, 500);
if(value <= num) {
debounceCalculate({
investAmt: value
})
}else {
this.money = num;
}

SmartNest套料软件旗舰店,http://smartnest.taobao.com 热忱欢迎您的光临! 诚信经营,价格实惠,货源充足。诚信对待每一个客户,稍有疏忽或者怠慢的地方,请亲见谅! 本网店刚刚开业,只为信誉,价格实惠,欢迎购买! 旺旺:winter393629362 QQ:393629362 电话:18948723725 SmartNest是武汉智格科技有限公司历经十余年不懈努力、精心研发的一款具有自主知识产权的切割套料编程软件,该软件的核心技术指标已达到国际先进水平! (1)全自动高速优化套料——利用率提高1%~5% (2)全自动智能共边切割——切割效率提高10%~50% 专业的研发团队、持续的改进完善、长期的应用实践将SmartNest打造成国最优秀的专业级产品,被用户誉为“国目前最好的切割套料编程软件”! SmartNest是武汉智格科技有限公司历经十余年不懈努力、精心研发的一款具有自主知识产权的切割套料编程软件,该软件的核心技术指标已达到国际先进水平!专业的研发团队、持续的改进完善、长期的应用实践将SmartNest打造成国最优秀的专业级产品,被用户誉为“国目前最好的切割套料编程软件”! SmartNest是一套用于板材切割下料的计算机软件系统,具有强大的优化套料与自动编程功能,适用于火焰/等离子/激光/水射流等各类数控切割机。SmartNest软件的功能覆盖了板材下料及其生产管理的各个方面,包括切割零件库管理、板材及其余料库管理、自动套料、交互套料、切割轨迹优化、数控自动编程及切割模拟、数据汇总与统计报表等,并可与企业PDM、ERP等信息系统集成,为企业板材切割下料生产提供集成解决方案。实践表明:应用SmartNest系统可明显提高下料企业的板材利用率和编程、操作自动化水平,有效降低产品成本、规范生产管理、提高经济效益。 SmartNest产品特色 1、 功能齐备 提供多种套料算法(真实形状/矩形包络/通裁通剪/阵列式) 支持多种套料模式(单张/批量/复制/余料/局部填充/交互式) 集成化数据管理(零件库/钢板库/统计报表) 2、技术先进 全自动高速优化套料(材料利用率提高1%~5%) 全自动智能共边切割(提供多种共边切割方法,切割效率提高10%~50%) 3、操作简便 10分钟学会基本操作! 3分钟输出切割代码! 4、自主版权 具有完全自主知识产权,是国自己的套料软件 以著名高校为技术依托,提供优质的本地化服务 SmartNest主要功能: 1、切割零件库管理 2、切割钢板库管理 3、自动套料 4、交互套料 5、切割路径优化 6、自动编程与切割模拟 7、数据汇总与统计报表 8、集成解决方案 www.nestcut.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值