美文网首页
javaScript之 防抖和节流

javaScript之 防抖和节流

作者: Nothinglefttosa | 来源:发表于2018-10-23 22:38 被阅读0次
  1. 需求:最近面试,面试官问说一下你项目中做了哪些优化?
    • 小哥哥:不由得想起了,防抖和节流。
    • 面试官:能不能手撕一下。
    • 老规矩,先了解概念,在分析分析需求,切记永远不要着急写代码。
  2. 先普及下概念。
    • 函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。
      • 不有的想起了一个场景,
        • 输入框内容校验 ,类似百度联想词
        • 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮
        • 通过监听 resize 事件,对某些自适应页面调整DOM的渲染(通过CSS实现的自适应不再此范围内)
        • 通过监听 keyup 事件,监听文字输入并调用接口进行模糊匹配
        • ......
    • 函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数。
      • 在来个不由得想起了一个场景,说这话的时候多少有点尴尬。
        • 抢购的时候。
        • ......
      • 画外音:任何脱离了业务场景的技术都是耍流氓,防抖也好,节流也罢,适合他的业务场景才是最好的。
  3. 分析需求。
    • 防抖:我们应该封装一个函数,这个函数需要哪些参数,看上边概念的两个关键字:一定时间(delay),处理函数(fn)。
    • 开撕:
         function debounce(fn, dealy) {
             let timer = null
             return function () {
                 //上来的给他清理掉哦,感兴趣的同学可以去研究下setTimeout(),和 
                 // clearTimeout
                 clearTimeout(timer)
                 //在这个时间内我只调用一次事件处理函数,是不是达到防抖的目的呢。
                 timer = setTimeout(function () {
                     fn.apply(this, arguments)
                 }, dealy)
             }
         }
        // 功能实现,800ms之内,你触发多少次我只执行一次,就是这么任性
        input.oninput = debounce(fn,800)  
    
    • 节流:我们还是应该封装一个函数,需要参数,事件处理函数(fn),一定时间(wait)
         function throttle(fn, wait) {
             //定义一个事件为0,第一次肯定会执行
             let lastTime = 0
             return function () {
                 //拿到从1970年到现在的时间戳
                 let nowTime = new Date.getTime()
                 //在这个时间内我才触发事件处理函数,是不是起到节流的目的呢。
                 if (nowTime - lastTime > wait) {
                     fn.apply(this, arguments)
                     lastTime = nowTime
                 }
             }
         }
         //功能实现,不好意思,300ms这个时间之内,点击我多少次,我就给你处理一次,sorry
         button.click = throttle(fn,300)
    
  4. 功能实现,没啥难的哦,这里也没涉及到啥知识点,小弟不才,尝试着写博客,有问题,希望各位前辈指出。

相关文章

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • javaScript之 防抖和节流

    需求:最近面试,面试官问说一下你项目中做了哪些优化?小哥哥:不由得想起了,防抖和节流。面试官:能不能手撕一下。老规...

  • 彻底弄懂函数防抖和函数节流

    函数防抖和节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScrip...

  • 函数防抖和函数节流

    函数防抖和函数节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScr...

  • JavaScript防抖和节流

    无论是防抖还是节流都是为了避免回调函数中的处理随着连续触发事件每次都执行 防抖和节流都是为了防止函数(事件)的连续...

  • 防抖和节流 javascript

    防抖(Debounce)指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执...

  • JavaScript防抖和节流

    前言 debounce(防抖)和throttle(节流)是两个相似的技术,都是为了减少一个函数无用的触发次数,以便...

  • JavaScript 节流和防抖

    什么是节流和防抖 节流和防抖的本质都是用闭包的形式,通过对事件对应的回调函数进行包裹,用自由变量缓存时间信息,最后...

  • JavaScript防抖和节流

    防抖和节流 相同:在不影响客户体验的前提下,将频繁的回调函数,进行次数缩减.避免大量计算导致的页面卡顿.不同:防抖...

  • JavaScript - 防抖和节流

    lodash工具库里有实现防抖和节流的函数 防抖和节流严格算起来应该属于性能优化的知识,但实际上遇到的频率相当高,...

网友评论

      本文标题:javaScript之 防抖和节流

      本文链接:https://www.haomeiwen.com/subject/jfuzzftx.html