防抖与节流方案_【Javascript】节流和防抖函数及防止用户重复提交

前言:前几天在做小程序的时候,碰到一个问题就是通过canvas要搬动canvas画布中的某个图片进行移动,这时候就产生了频繁的setData,就会导致性能出现了一点问题,我们一般比较喜欢的是不进行时时的setData毕竟消耗资源,那么这时候就需要用到节流函数了。

节流函数

说明:节流其实就是减少逻辑触发的频率,实际机制就是利用了计时,在短时时间内不进行频繁触发

const _.throttle = (func, wait) => {  let timer;  return () => {    if (timer) {      return;    }    timer = setTimeout(() => {      func();      timer = null;    }, wait);  };};var throttle = function(func,watduration)

使用:

throttle(function(){console.log(123456)},1000)throttle(function(){console.log(123456)},1000)throttle(function(){console.log(123456)},1000)

防抖函数

说明:简单理解就是不管函数在执行了多少次,最终只能执行成功一次就是最后一次。

var timeoutFunc = null;/**callbackFunc  回调函数waitDuration  到计时频率,毫秒级;比如:1000 代表1秒*/var antiShakeFunc = function(callbackFunc,waitDuration){  clearTimeout(timeoutFunc);  timeoutFunc=setTimeout(function(){    callbackFunc();  },waitDuration);}

使用:

antiShakeFunc(function(){console.log(123456)},2000)antiShakeFunc(function(){console.log(123456)},2000)antiShakeFunc(function(){console.log(123456)},2000)antiShakeFunc(function(){console.log(123456)},2000)antiShakeFunc(function(){console.log(123456)},2000)antiShakeFunc(function(){console.log(123456)},2000)...只输出最后一条

防止重复提交方案

  • 大家都喜欢 利用外部的标记为来防止
var symbol = 0;var submit = function(){if(symbol){  return;  }  symbol = 1;  $.post("/xxx/xxx",{},function(res){  console.log(res);  })}#方案没有问题
  • 建议使用防抖函数来保证只执行一次。当然只是建议,因为有延迟。不过还是有优化方案。

使用场景

  • 节流函数
    • 动画一类的
    • ...
  • 防抖函数
    • 对值的惟一性,不需要时时修改,但是要保证最后一次和之前是连续的
c3b4937c58214ee847307178dc7a063f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值