📜  节流 (1)

📅  最后修改于: 2023-12-03 15:41:25.209000             🧑  作者: Mango

节流 (Throttling)

在前端开发过程中,我们有时需要对某些事件进行频繁处理,如滚动事件、缩放事件、窗口改变事件等等。但是频繁处理可能会影响网页性能,造成卡顿和延迟。节流是一种应对这种情况的解决方案。

什么是节流?

节流是一种控制函数执行频率的方法。它可以确保函数在一段时间内只执行一次,减少函数执行的次数。实现节流需要设置一个时间间隔,若在这个时间间隔内触发了同一个事件,则只函数只执行一次,若事件没有被触发,则函数在时间间隔结束后执行。

节流的优点
  1. 降低网页卡顿和延迟。因为频繁执行函数可能会让网页出现卡顿和延迟的情况,而通过节流可控制函数的执行频率,使网页更加流畅。
  2. 节省资源。节流能减少函数的执行次数,也同时减少了资源的占用,从而降低网页的负荷。
节流的应用场景
  1. 频繁操作 UI。如拖拽和滚动操作等,在这些场景中我们需要对事件进行频繁处理,并且需要立即响应,但是过于频繁也会影响性能。通过节流可以在一定程度上限制操作频率,保证用户操作的及时反馈。
  2. 网络请求。网络请求需要消耗资源,过于频繁的请求容易导致出错或者浪费资源。通过节流可以减少请求的次数,从而提高效率。
  3. 监听滚动事件。滚动事件经常用于实现懒加载和无限滚动等功能,但过于频繁的滚动操作也会影响性能。通过节流我们能够减少滚动事件的执行次数,从而缓解对性能的影响。
节流的实现

下面是一个简单的实现方式,实现方式主要分为两种,第一种是时间戳方式和第二种是定时器方式。

// 时间戳方式
function throttle(callback, delay) {
  let lastTime = 0;
  return function() {
    const nowTime = +new Date();
    if (nowTime - lastTime > delay) {
      callback.apply(this, arguments);
      lastTime = nowTime;
    }
  }
}

// 定时器方式
function throttle(callback, delay) {
  let timer = null;
  return function() {
    if (!timer) {
      timer = setTimeout(() => {
        callback.apply(this, arguments);
        timer = null;
      }, delay)
    }
  }
}

// 在滚动事件中应用定时器方式的节流
window.addEventListener('scroll', throttle(function() {
  console.log('滚动事件被触发了');
}, 500))
总结

节流是一种简单但十分实用的优化技术,可以有效提高网页性能,减少资源浪费。本文介绍了节流的基本概念、优点和应用场景,并给出了两种常用的实现方式。对于掌握节流技术,可以进一步了解防抖技术,帮助你更好地提高前端性能。