防抖和节流都是优化前端性能的一种常用技术,它们的作用是减少代码执行的频率,防止短时间内多次触发同一事件。

防抖(Debounce):

防抖的作用是在一段时间内,只执行最后一次触发的操作,比如在输入框中输入关键字进行搜索时,用户每输入一个字符都会触发搜索操作,如果没有防抖,那么每输入一个字符就会触发一次搜索,这样会增加服务器的负担和网络请求的次数,影响用户体验。

防抖的实现方法是设置一个定时器,当触发事件时,清除先前设置的定时器,重新设置一个定时器,在一定时间内没有再次触发事件,定时器就会执行对应的操作。

下面是一个简单的防抖函数:

function debounce(fn, delay) {
  let timer = null;
  return function() {
    let context = this;
    let args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function() {
      fn.apply(context, args);
    }, delay);
  }
}

这个函数接受两个参数,第一个参数是要执行的函数,第二个参数是延迟时间。当事件触发时,会清除之前设置的定时器,重新设置一个定时器,在延迟时间内没有再次触发事件,定时器就会执行对应的操作。

节流(Throttle):

节流的作用是在一段时间内,固定执行一次操作,比如在滚动页面时,我们可能需要进行一些计算或者页面渲染操作,如果没有节流,那么每次滚动页面都会触发一次操作,这样会影响页面的性能。

节流的实现方法是设置一个定时器,在一定时间内只执行一次操作,如果在延迟时间内再次触发事件,就会清除之前设置的定时器,重新设置一个定时器,延迟时间到了之后,定时器就会执行对应的操作。

下面是一个简单的节流函数:

function throttle(fn, delay) {
  let timer = null;
  return function() {
    let context = this;
    let args = arguments;
    if (!timer) {
      timer = setTimeout(function() {
        fn.apply(context, args);
        timer = null;
      }, delay);
    }
  }
}

这个函数接受两个参数,第一个参数是要执行的函数,第二个参数是延迟时间。当事件触发时,如果没有定时器在执行,就会设置一个定时器,在延迟时间内只执行一次操作,延迟时间到了之后,定时器就会执行对应的操作。如果在延迟时间内再次触发事件,就会清除之前设置的定时器,重新设置一个定时器。

帮我写一个防抖节流的方法

原文地址: https://www.cveoy.top/t/topic/gOV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录