防抖和节流 含义及区别图文详解秒懂

这篇具有很好参考价值的文章主要介绍了防抖和节流 含义及区别图文详解秒懂。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

防抖和节流都是为解决短时间内频繁触发某个功能函数而导致的性能问题。比如,触发频率过高而导致响应速度跟不上,以致出现延迟,假死或卡顿的现象。 

防抖

图解:一件事情,计划5s以后触发,结果中途意外触发了,那么就重新从0开始5秒的计时,这就导致本身计划的事情就延迟触发了,当...在延迟的5秒过程当中又再次意外触发了,就继续从0开始5秒的计时,而不会执行事件处理函数,那么什么时候触发5s后的事件呢,就是不再触发的时候。防抖和节流 含义及区别图文详解秒懂

函数防抖 代码解:

看下面防抖函数,每次触发时 有定时器  就 clearTimeout 清空定时器,如果频繁触发就一直清空定时器, 等停止触发的时候,只执行最后一次定时器事件才会发送请求, 这种函数虽然会多次执行 但是最终的有效代码 只执行一次的行为 称为 防抖

// 防抖函数
function debounce(delay) {
  let timer //声明一个存储定时器的变量
  return function () {

    if (timer) clearTimeout(timer) 
    timer = setTimeout(() => {
      // 暂时理解不了(this,arguments)指向改变的问题
      // getList.call(this, arguments)

      getList(obj)
      // 不输入延迟 则默认 1000 ms
    }, delay || 1000)
  }
}

防抖后的效果:看!!!等停止触发的时候,只执行最后一次事件,就是防抖的核心。

如果停止输入但是在指定间隔内又输入,会重新触发计时。

防抖和节流 含义及区别图文详解秒懂

节流

介绍:js 节流阀

通过判断是否到达一定时间来触发回调函数。

顾名思义节流,也是节省能耗的一种,防止多次频繁触发事件导致资源的不必要浪费,但是节流 是需要 有效代码会根据固定频率去执行,原理就是定义一个节流阀,在执行的事件当中打开节流阀,最重要的是在下次执行这个事件之前要判断,打开的节流阀是否存在,上次事件还存在的话就停止继续执行等待执行完毕,不存在的话就继续执行。

防抖和节流 含义及区别图文详解秒懂

函数节流 代码解: 

看下面节流函数,这里利用定时器演示节流效果,先定义空的定时器timer,如果有timer就中断执行,第一次执行肯定是没有timer,对timer进行定时器赋值,下面就会执行定时器中的请求,定时器中请求完成后对节流阀timer重新放开(这一步是节流的核心),每次请求完成都需要打开节流阀,只有当节流阀 timer 为null时再次点击执行事件才会进行下一次请求事件,否则重复多次点击执行事件时就会先判断之前节流阀是还存在吗,是就中断函数执行

function throttle(foo,delay){
    // foo-被执行节流的函数
    // 节流的节奏时间间隔
 
    // 初始化timer,并使用闭包访问
    let timer;
    return function(){
        // 若之前已有节流,中断函数执行
        if(timer) return;
        // 若(之前/此时)无节流,重新设定节流
        timer = setTimeout(()=>{
            // 暂时理解不了(this,arguments)指向改变的问题
            foo.call(this,arguments)
            // 本次节流执行后,通过给timer赋值null,释放timer
            timer = null
            // 不输入延迟 则默认 1000 ms
        },delay || 1000)
    }


    //也可以设置节流阀为布尔值或者是一个变量,通常是布尔值多些
    function throttle(fn, delay = 200) {
        let flag = true
        return function (...args) {
            if (!flag) {
                return
            }
            flag = false
            setTimeout(() => {
                fn.apply(this, args)
                flag = true
            }, delay)
        }
    }

 要注意的是,防抖和节流返回的都是回调函数,需要先用变量接收,再进行变量的调用。

 防抖和节流的区别:

防抖:函数虽然会多次执行 但是有效代码只执行一次
节流:函数虽然会多次执行 但是有效代码只会根据固定频率去执行

这是关键区别:

  • 防抖有重置概念
  • 节流没有重置概念
  • 同样有多次执行操作,防抖是将多次变为执行最后一次
  • 节流是降低执行频率,变成隔一段时间执行一次
  • 防抖每次触发的时候都会先把之前的取消,然后重新执行
  • 节流执行的时候需要判断是否等待上次执行的延时函数

应用场景:

函数防抖(debounce):

  • search搜索联想,用户在不断输入值时,用防抖来节约请求资源;
  • window触发resize或scroll事件的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次。

函数节流(throttle):

  • 一定时间内多次点击一个功能按钮 
  • 鼠标不断点击触发,mousedown(单位时间内只触发一次)
  • 页面无限加载。需用户滚动页面时,每隔一段时间发一次 ajax 请求,而不是只要滚动就请求数据
  • 通过resize,使浏览器页面窗口放大缩小。

部分图 借鉴了掘进的博主文章,非常详细实用

图文结合——详解 js 防抖与节流 - 掘金文章来源地址https://www.toymoban.com/news/detail-459725.html

到了这里,关于防抖和节流 含义及区别图文详解秒懂的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序如何使用防抖和节流?

    防抖(Debounce)和节流(Throttle)都是用来优化函数执行频率的技术,特别在处理用户输入、滚动等频繁触发的情况下,它们可以有效减少函数的执行次数,从而提升性能和用户体验。但它们的工作方式和应用场景有所不同。 防抖的主要思想是,当持续触发事件时,在事件最

    2024年02月13日
    浏览(27)
  • axios、跨域与JSONP、防抖和节流

    Axios 是专注于 网络数据请求 的库。 相比于原生的 XMLHttpRequest 对象,axios 简单易用 。 相比于 jQuery,axios 更加 轻量化 ,只专注于网络数据请求。 axios.get(\\\'url\\\', { params: { /*参数*/ } }).then(callback) 例如: axios.post(\\\'url\\\', { /*参数*/ }).then(callback) 例如: 例如: 如果两个页面的 协议

    2024年02月08日
    浏览(28)
  • Vue - 使用Lodash实现防抖和节流

    GitHub Demo 地址 在线预览 Lodash 官网 更新:对应的vue3版的demo如下: GitHub Demo 地址 在线预览 参考: Vue 防抖节流 详细介绍 vue 优雅的实现防抖和节流 防抖、节流的介绍 js防抖和节流的实现原理及应用场景 js防抖节流应用场景及写法 JS中的防抖 函数节流(throttle)与 函数防抖(

    2024年02月01日
    浏览(33)
  • 了解同源策略 JSONP 案例-淘宝搜索 防抖和节流

    什么是跨域 同源指的是两个 URL 的协议、域名、端口一致,反之,则是跨域。 出现跨域的根本原因:浏览器的同源策略不允许非同源的 URL 之间进行资源的交互。 网页:http://www.test.com/index.html 接口:http://www.api.com/userlist 浏览器对跨域请求的拦截 注意:浏览器允许发起跨域请

    2024年02月05日
    浏览(31)
  • 了解防抖和节流:提升前端交互体验的实用策略

    本文将重点介绍前端性能优化方法之一的防抖和节流。首先解释了它们的概念和原理,然后探讨了它们在前端开发中的应用场景,如输入框搜索、滚动事件等。最后,通过简单的代码示例展示了如何实现防抖和节流函数。通过学习和应用这两种技术,我们可以有效地减少不必

    2024年02月05日
    浏览(28)
  • JS手写防抖和节流函数(超详细版整理)

    防抖(debounce) :每次触发定时器后,取消上一个定时器,然后重新触发定时器。防抖 一般用于用户未知行为的优化 ,比如搜索框输入弹窗提示,因为用户接下来要输入的内容都是未知的,所以每次用户输入就弹窗是没有意义的,需要等到用户输入完毕后再进行弹窗提示。

    2024年02月04日
    浏览(29)
  • 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流

    防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数 在 JavaScript 中,防抖(debounce)和节流(throttle)是用来限制函数执行频率的两种常见技术。 防抖(debounce) 是指在某个时间段

    2024年02月14日
    浏览(37)
  • 19、节流和防抖的区别以及应用场景的理解

    节流和防抖两者有什么区别? 节流和防抖分别用于什么场景? 节流( throttle )和防抖( debounce )是两种常用的浏览器事件处理方法。 相同点: 都是为了减少事件触发频率,优化性能。 不同点: 节流是指在一段时间内最多触发一次事件,节流算法会在特定的时间间隔内判断是否触

    2024年02月03日
    浏览(37)
  • 1 vue防抖和限流

    防抖(Debouncing)是一种前端开发中常用的技术,用于限制函数的执行频率。在防抖的机制下,一个函数在一定时间内只会执行一次,即使它被频繁地调用。 具体来说,防抖的实现方式是设置一个定时器,在每次函数被调用时,先清除之前的定时器,然后重新设置一个新的定

    2024年01月19日
    浏览(28)
  • Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

    各位朋友你们好呀。今天是立春,明天就是正月十五元宵节了,这种立春 + 元宵相隔的时候,可是很难遇到的,百年中就只有几次。在这提前祝大家元宵快乐。 今天给大家带来的是 Vue 3 中的极致防抖/节流(含常见方式防抖/节流) 这篇文章,文章中不仅会讲述原来使用的防

    2024年02月01日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包