zoukankan      html  css  js  c++  java
  • 前端性能优化之函数防抖

    我们在做输入框实时查询时,一般会这样写:

    <input type="text" id="searchInput">
    <script>
      let searchInput = document.querySelector('#searchInput')
      searchInput.oninput = function () {
        // 获取搜索值后,执行搜索推荐请求
        console.log(this.value)
      }
    </script>

    如果用户是想搜索lyh,在输入时相当于执行了3次搜索(l/ly/lyh三次),最终得到结果,那么前两次的请求相当于浪费了。

    而且由于三次接口返回的时间不确定,很可能会出现页面最终显示的数据出现三次搜索的结果叠加的情况。

    性能优化方案:

    判断用户是否已经输入完毕,输入完毕后执行搜索推荐。

    那如何判断用户是否已经输入完毕,约定如果用户在1000ms无新输入时,则视为输入完毕。

    这一操作即为函数防抖。

    示例代码如下:

    let searchInput = document.querySelector('#searchInput')
    let searchTimer
    
    searchInput.oninput = function () {
        // 如果在用户输入的范围内已经存在一个定时器,就将此定时器关闭,启动新定时器
        if (searchTimer) {
          clearTimeout(searchTimer)
        }
        // 启动定时器
        searchTimer = setTimeout(() => {
          console.log(this.value)
        }, 1000)
    }

    此时,用户再连续输入lyh时,只会执行最后一次查询,完美~

  • 相关阅读:
    Lattice Diamond 的学习之新建工程
    candence 笔记总结
    音乐发生器的原理
    PAL/NTSC 制电视广播技术有关知识--FPGA
    以后绝对不能再犯的错误
    BZOJ1112: [POI2008]砖块Klo
    Luogu P1533 可怜的狗狗
    BZOJ4542: [Hnoi2016]大数
    BZOJ5131: [CodePlus2017年12月]可做题2
    BZOJ3083: 遥远的国度
  • 原文地址:https://www.cnblogs.com/luoyihao/p/14118697.html
Copyright © 2011-2022 走看看