当前位置: 首页 > news >正文

性能优化之防抖与节流

(一)防抖

(1)定义:单位事件内,频繁触发,只执行最后一次(像王者荣耀的回城操作)

(2)使用场景:搜索输入框、手机号邮箱输入检测

(3)如何使用防抖

   (3.1)lodash处理防抖

     引入lodash.min.js,用其提供的函数为_.debounce(fun,时间)

     第一个参数为要处理的函数,第二个为过了多少秒执行函数

   (3.2)手写防抖函数

        核心思路:利用定时器setTimeout实现

  • 声明一个定时器变量
  • 当鼠标每次滑动先判断是否有定时器了,如果有则先清除以前的定时器
  • 如果没有定时器则开启定时器,记得存在变量里面
  • 在定时器里面调用要执行的函数

function debounce(fn,t){

      let time

      // 如果直接写函数,则页面一打开就会执行函数,且执行一次,所以要返回一个函数

      return function(){

        if(time) clearTimeout(time)

       time=setTimeout(function(){

          fn()

        },t)

      } 

    }

(二)节流

(1)节流定义:单位时间内,频繁触发,只执行一次(例如技能冷却,等几秒后才能执行下一次的代码)

(2)应用场景:鼠标移动mousemove、页面尺寸缩放resize、滚动条滚动scroll等等

(3)如何实现节流

(3.1)lodash处理节流

        _.throttle(fn,时间),第一个参数为要执行的函数,第二个参数为最多多少秒执行一次函数

(3.2)手写节流函数

  核心思路:利用定时器setTimeout实现

  • 声明一个定时器变量 
  • 当鼠标每次滑动先判断是否有定时器了,如果有则不开启定时器
  • 如果没有定时器则开启定时器,记得存在变量里面
  • 在定时器里面调用要执行的函数,定时器里面要用time=null把定时器清空

// 手写节流函数

      function  throttle(fn,t){

        let time=null

        return function(){

          if(!time){

            time=setTimeout(function(){

              fn()

              // 在setTimeout中无法删除定时器,因为定时器还在运作,应使用time=null,而不是clearTimeout

              time=null

            },t)

          }

        }

      }

http://www.lryc.cn/news/41412.html

相关文章:

  • 数组模拟单链表
  • 蓝桥杯刷题第十四天
  • 面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
  • Activiti 工作流简介
  • 【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
  • 【C++】Google编码风格学习
  • JavaScript 中的Promise 函数
  • 学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
  • 快看!这只猫两次登上 Github Trending !!!
  • Linux->文件系统初识
  • InfluxDB和IotDB介绍与性能对比
  • 计算机体系结构(校验码+总线)
  • JavaWeb《三》Request请求转发与Response响应
  • 断言assert
  • 【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统
  • 详解结构体内存对齐
  • 指针:程序员的望远镜
  • 【python实现学生选课系统】
  • 备受青睐的4D毫米波成像雷达,何以助力高阶自动驾驶落地?
  • 3.20算法题(一) LeetCode 合并两个有序数组
  • QT | 编写一个简单的上位机
  • DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(2/5)
  • 嵌入式学习笔记——SysTick(系统滴答)
  • Linux实操之服务管理
  • 基于Java+SpringBoot+vue的毕业生信息招聘平台设计和实现【源码+论文+演示视频+包运行成功】
  • 智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)
  • 建立农村污水处理设施已经成为了当务之急!
  • 【Matlab算法】粒子群算法求解一维线性函数问题(附MATLAB代码)
  • 【JavaEE】Thread 类及常用方法
  • C语言数据结构初阶(7)----队列