• 性能优化之节流


    实现方式:

    1.lodash提供的节流函数来处理

    2.手写一个节流函数来处理

    需求:鼠标在盒子上移动,不管移动多少次,每隔500ms才+1

    方法一:lodash提供的节流函数来处理

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. width: 500px;
    11. height: 500px;
    12. background-color: #ccc;
    13. color: #fff;
    14. text-align: center;
    15. font-size: 100px;
    16. }
    17. </style>
    18. </head>
    19. <body>
    20. <script src="./js/lodash.min.js"></script>
    21. <div class="box"></div>
    22. <script>
    23. // 利用防抖实现性能优化
    24. // 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1
    25. const box = document.querySelector('.box')
    26. let i = 1
    27. function mouseMove() {
    28. box.innerHTML = i++
    29. }
    30. // mousemove鼠标移动事件
    31. // 鼠标一移动就500ms后就触发debounce事件,i就++
    32. // 语法: _.throttle(fun,时间)
    33. box.addEventListener('mousemove', _.throttle(mouseMove, 500))
    34. </script>
    35. </body>
    36. </html>

    方法二:手写一个节流函数来处理

     实现方式:

            节流的核心就是利用定时器setTimeout来实现

            1声明一个定时器变量

            2每次事件触发时都先判断是否有定时器了,如果有则不开启定时器

            3如果没有定时器则开启定时器,存到变量里面

              定时器里面调用执行的函数

              定时器里面要把定时器清空

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. width: 500px;
    11. height: 500px;
    12. background-color: #ccc;
    13. color: #fff;
    14. text-align: center;
    15. font-size: 100px;
    16. }
    17. </style>
    18. </head>
    19. <body>
    20. <div class="box"></div>
    21. <script>
    22. // 利用防抖实现性能优化
    23. // 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1
    24. const box = document.querySelector('.box')
    25. let i = 1
    26. function mouseMove() {
    27. box.innerHTML = i++
    28. }
    29. // 手写一个节流函数
    30. // 节流的核心就是利用定时器setTimeout来实现
    31. // 1声明一个定时器变量
    32. // 2每次事件触发时都先判断是否有定时器了,如果有则不开启定时器
    33. // 3如果没有定时器则开启定时器,存到变量里面
    34. // 定时器里面调用执行的函数
    35. // 定时器里面要把定时器清空
    36. function throttle(fn, t) {
    37. let timer = null
    38. return function(){
    39. if(!timer){
    40. timer = setTimeout(function(){
    41. fn()
    42. // 时间到了才去清空,时间没到就不能清空,所以要写在里面
    43. timer = null
    44. },t)
    45. }
    46. }
    47. }
    48. box.addEventListener('mousemove', throttle(mouseMove, 500))
    49. // 有括号的函数会直接执行的不用鼠标滑动,所以当鼠标滑动时需要有一个return
    50. // 在setTimeout中是无法删除定时器的,因为定时器还在运作,所以使用timer=null而不是clearTimeout(timer)
    51. </script>
    52. </body>
    53. </html>

  • 相关阅读:
    【RLHF个人笔记】RLHF:Reinforcement Learning from Human Feedback具体过程
    深入思考JAVA虚拟机,实现从0到1的突破
    SpringCloud-Eureka-介绍+非集群式搭建
    MapReduce
    qiankun-boot 一个开箱即用的 qiankun cli
    卷积神经网络的基本操作,卷积神经网络理论基础
    探秘 | 简说IP地址以及路由器的功能究竟是什么?
    Material Design 风格的 UI 框架 Vuetify 使用初体验
    Multi-task Classification Model Based On Multi-modal Glioma Data
    20个最佳实践提升Terraform工作流程|Part 2
  • 原文地址:https://blog.csdn.net/weixin_52512511/article/details/133246538