• 节流(Throttle)和防抖(Debounce)


    为啥要使用防抖和节流

    在项目开发中,我们经常用到的滚动事件或者用户输入事件,都是一些高频事件,如果对这类事件触发的频率没有节制,就会加重浏览器和服务器的负担。节流和防抖目的就是减少事件触发的次数。

    1.什么是防抖

    防抖(debounce)指的是: 频繁触发 某个操作时, 只执行最后一次
    好处:这样可以有效减少请求的次数,节省网络资源。

    实现代码如下:

    1. <body>
    2. <label> 姓名:</label><input type="text" placeholder="请输入用户名">
    3. </body>
    4. <script>
    5. // 防抖:短时间内触发多次,只会执行最后一次
    6. let input=document.querySelector('input')
    7. const info=function (){
    8. console.log(input.value);
    9. }
    10. input.addEventListener('input',debounce(info,1000))
    11. // 封装防抖函数
    12. function debounce(fn,time){
    13. let timer=null
    14. return()=>{
    15. // 清除上一次的计时器
    16. clearTimeout(timer)
    17. timer=setTimeout(() => {
    18. fn()
    19. }, time);
    20. }
    21. }
    22. </script>

    主要应用场景有:

    a、scroll事件滚动触发,
    b、搜索框只有在输入完后,才执行查询的请求
    c、表单验证
    d、按钮提交事件
    e、浏览器窗口缩放,resize事件


     2.什么是节流

    节流(throttle)指的是: 单位时间内 频繁 触发同一个操作, 只会触发 1 次

     实现代码如下:

    1. <body>
    2. <div></div>
    3. </body>
    4. <script>
    5. let div=document.querySelector('div')
    6. const info=function(){
    7. console.log('点击了一次');
    8. }
    9. div.addEventListener('click',throttle(info,5000))
    10. //封装节流的函数
    11. function throttle(fn,time){
    12. let flag=false
    13. return()=>{
    14. if(flag===true){
    15. return
    16. }
    17. flag=true
    18. setTimeout(function(){
    19. fn()
    20. flag=false
    21. },time)
    22. }
    23. }
    24. </script>

    应用场景:

    a、DOM元素的拖拽功能实现
    b、射击游戏中,单位时间内只能发射一颗子弹。
    c、计算鼠标移动的距离
    d、监听scroll事件

  • 相关阅读:
    Spring Cloud Netfix Hystrix(断路器)
    神经生物学博士就业前景,神经网络硕士就业前景
    苏宁滑块验证
    k8s StatefulSet
    axios---封装loadding组件的显示和隐藏
    java毕业设计畅言情感互助网站mybatis+源码+调试部署+系统+数据库+lw
    过滤器、监听器、拦截器的区别,你都搞懂了吗?
    基于PHP+MYSQL高等数学在线学习教学系统的设计与实现
    MySQL高级语句
    libvirt vcpu热插拔报错:failed to find appropriate hotpluggable vcpus
  • 原文地址:https://blog.csdn.net/m0_67841039/article/details/125610249