手搓节流 throttle

3 篇文章 0 订阅

一句话概括节流:高频事件触发,在n秒内只会执行一次,所以节流处理执行频率

总结

节流函数是前端开发中常用的性能优化手段,通过控制函数的执行频率,可以有效地降低资源消耗,提升用户体验。在实际项目中,合理使用节流函数能够有效应对各种需要频繁触发的场景,是优化前端性能的重要一环。

效果:

一秒内,输入打印,结果:限制函数执行频率的方法,确保函数在一定时间间隔内最多执行一次

节流 throttle 

// 节流函数,设置默认时间为200毫秒
const throttle = (func, delay= 200) => {
    if (typeof func !== 'function') {
        throw new TypeError('需要一个函数作为参数');
    }
    delay= +delay|| 0;
    let lastTime = 0;

    return function () {
        const self = this;
        const args = arguments;
        let currentTime = +new Date(); // 获取当前时间

        if (currentTime - lastTime > delay || !lastTime) {
            // 如果距离上次执行的时间超过了间隔时间,或者是第一次调用
            func.apply(self, args); // 执行函数
            lastTime = currentTime; // 更新上次执行时间
        }
    };
};

 使用方法

假设我们有一个需求:在用户输入内容后,每隔1秒执行相应的操作,例如发送网络请求或更新界面。我们可以利用上述节流函数来实现这一需求。

    // 输入内容即显示
    changeInput () {
      console.log('输入内容即显示', this.userName);

      // 调用节流的方法
      this.console()
    },

    // 节流 输入后 1s 内只会请求一次
    console:throttle(function() {
      console.log('节流打印', this.userName);
      // 这里就可以调用请求方法
    }, 1000),

 在这个示例中,changeInput 方法用于监听用户的输入事件,而 console 方法则是通过 throttle 函数包裹,确保在1秒内最多执行一次。这样就能有效地减少函数的频繁执行,提高页面的响应速度和性能表现。

一般项目直接使用:

 // 节流 输入后 1s 内只会请求一次
    changeInput:throttle(function() {
      console.log('节流打印', this.userName);
      // 这里就可以调用请求方法
    }, 1000),

代码解释:

  1. 函数功能

    • 节流(Throttle) 是一种限制函数执行频率的方法,确保函数在一定时间间隔内最多执行一次。在你的实现中,通过比较当前时间与上次执行时间的差值来决定是否执行函数。
  2. 参数与返回值

    • func 是要执行的函数,delay 是执行的时间间隔,默认为 200 毫秒。
    • 返回一个闭包函数,实际执行时会根据时间间隔控制是否执行 func
  3. 时间处理

    • currentTime - lastTime > delay 表示距离上次执行的时间超过了指定的间隔时间,此时执行 func
    • !lastTime 表示第一次调用时也会直接执行 func
  4. 执行上下文和参数传递

    • 使用 apply(self, args) 来确保在闭包函数中正确传递执行上下文和参数。
  5. 注意事项

    • 确保节流函数在不同场景下的适用性,例如处理用户输入、滚动事件等需要控制频率的情况。
    • 可以根据实际需要调整 delay 参数,以满足特定场景下的执行频率要求。
  6. 返回函数的执行频率

    • 节流函数保证了 func 在 delay 内最多执行一次。如果在短时间内频繁触发调用,函数执行会被限制在指定的时间间隔内,从而减少不必要的计算或操作。

这种实现方式可以有效地应用于需要限制函数执行频率的场景,提升应用性能和用户体验。

关于当防抖,请点击这里:手写防抖debounce

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端开发中,throttle节流)是一种优化性能的技术,用于限制函数的执行频率。它可以确保一个函数在一定时间间隔内只被执行一次。在给定的时间间隔内,如果多次触发了该函数,只有第一次触发会立即执行,后续的触发会被忽略,直到时间间隔过去后,再次触发时才会执行。这样可以减少函数的执行次数,避免资源的浪费和性能的下降。 在给出的引用中,有三个例子展示了throttle的实现方式。和是两种常见的方法,分别使用了时间戳和定时器来实现节流。其中,使用时间戳记录上次触发的时间,并通过与当前时间的差值判断是否满足时间间隔,如果满足则执行函数。使用定时器,在函数执行后设置一个定时器,当定时器触发时执行函数,如果在定时器触发前再次触发了函数,则清除之前的定时器重新设置。 另外,是一种防抖(debounce)的例子,与节流类似,但是在时间间隔内的触发会重新计时,只有在一定时间内没有再次触发时才会执行函数。 需要注意的是,节流和防抖都是根据实际需求来选择使用的,具体使用哪种方式要根据具体的场景和需求来确定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [前端性能优化——节流throttle)](https://blog.csdn.net/weixin_43371610/article/details/100101268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [js 函数防抖(debounce)函数节流throttle)](https://blog.csdn.net/qq_27009517/article/details/118381886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值