0
点赞
收藏
分享

微信扫一扫

什么是节流?

Brose 2022-04-01 阅读 71
javascript

我们都知道防抖是在最后一个人上车之后再进行计时(可以先看我写的什么是防抖函数),一段时间后没有人上车就发车,而节流则类是于准点发车的公交车,即一段时间后就发车,中途有人上车也不会像防抖一样进行重新计时。

常用的场景有:

窗口调整,页面滚动,抢购疯狂点击

例如:下面这个例子,我们每点击一次按钮,数字就会进行加一,我们点击多块,数字就会变多块,这有时不是我们想要的,比如点抢购物券,因为这样我们可以加一个恶意程序,进行多次点击,这时候就很浪费性能

<div id='oDiv'>0</div>
<button id='oBtn'>click</button>
<script>
  var oDiv = document.getElementById('oDiv');
  var oBtn = document.getElementById('oBtn');
  oBtn.onclick = function() {
    oDiv.innerText = parseInt(oDiv.innerText) + 1;
  }
</script>

比如我,我们用一个for循环,循环重复执行点击事件

for( var i = 0; i < 1000; i ++) {
  oDiv.onclick();
}

这时候,节流函数就可以解决这个问题,一段时间内只执行一次,哪怕这段时间内点击上千次,这段时间内也只执行一次。

节流函数:

function throttle (handler, wait) { //等待wait时间后执行一次handler函数
  var lastTime = 0;
  return function (e) {
    var nowTime = new Date().getTime(); //获取当前的时间
    if (nowTime - lastTime > wait) {
       handler.apply(this, arguments);
       lastTime = nowTime;
    }
  }
}
举报

相关推荐

0 条评论