首页 > 其他分享 >一篇文章理清什么是防抖、节流

一篇文章理清什么是防抖、节流

时间:2023-12-05 19:32:26浏览次数:29  
标签:function 防抖 节流 args 理清 func timerId 函数

一篇文章理清什么是防抖、节流_前端

防抖和节流是两种常见的前端优化技术,用于限制函数的执行次数。

防抖是指在事件被触发后,等待一段时间后执行函数。如果在这段时间内事件再次被触发,那么计时器会被重置,重新等待一段时间后执行函数。这可以防止函数被频繁调用,特别是一些高频事件(如窗口调整大小、滚动等)。

function debounce(func, delay) {
  let timerId;
  
  return function(...args) {
    clearTimeout(timerId);
    
    timerId = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}

function handleResize() {
  console.log('Window resized!');
}

const debouncedResizeHandler = debounce(handleResize, 300);

window.addEventListener('resize', debouncedResizeHandler);

在上面的例子中,我们使用setTimeout来延迟执行传入的函数。

总的来说,防抖就是只认最后一次调用。

节流是指在一定时间间隔内,只执行一次函数。如果在这段时间内事件再次被触发,将会被忽略不执行。

function throttle(func, delay) {
  let timerId;
  let lastExecTime = 0;
  
  return function(...args) {
    const currentTime = Date.now();
    
    if (currentTime - lastExecTime >= delay) {
      func.apply(this, args);
      lastExecTime = currentTime;
    }
  };
}

function handleScroll() {
  console.log('Window scrolled!');
}

const throttledScrollHandler = throttle(handleScroll, 300);

window.addEventListener('scroll', throttledScrollHandler);

在上面的例子中,新的函数通过比较当前时间和上次执行时间来限制函数的执行。

总的来说,节流就是指定时间内只触发一次函数。


标签:function,防抖,节流,args,理清,func,timerId,函数
From: https://blog.51cto.com/u_16385820/8695061

相关文章

  • 《优化接口设计的思路》系列:第六篇—接口防抖(防重复提交)的一些方式
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......
  • JavaScript 防抖和节流
    JavaScript防抖和节流防抖以下js类库实现方法:lodash.debounceunderscore-debounce最初接触实现一个防抖函数的需求,是在前端封装React组件的过程中,当时是要实现一个搜索下拉框,根据输入提示搜索内容。根据<input>的input事件来监听用户输入,并调用后端接口传递输入信息......
  • 记录--闭包,沙箱,防抖节流,函数柯里化,数据劫持......
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助函数创建与定义的过程函数定义阶段在堆内存中开辟一段空间把函数体内的代码一模一样的存储在这段空间内把空间赋值给栈内存的变量中函数调用阶段按照变量名内的存储地址找到堆内存中对应的存储空间......
  • 函数防抖-节流
     /***函数防抖*@param{function}fn执行函数*@param{number}delay延迟时间毫秒*@param{boolean}immediately是否立刻执行函数*/functiondebounce(fn,delay,immediately){vartimer=null,firstInvoke=true;returnfunction(){if......
  • 浪潮信息赵帅:实现算力全流程绿色化,理清数据中心可持续发展解题思路
    近日,2023IDC中国可持续发展峰会在北京顺利召开。大会以“铸就可持续发展业务的绿色科技”为主题,从IDCESG洞察、先锋企业低碳化案例研究及合作伙伴解决方案等方面,帮助企业理清“双碳政策”下的解题思路。浪潮信息服务器产品线总经理赵帅受邀参会并发表了“绿色算力助力产业可持续......
  • 防抖和节流
    防抖(debounce)所谓防抖,就是指触发事件后在n秒内函数只能执行一次,如果在n秒内又触发了事件,则会重新计算函数执行时间。非立即执行版的意思是触发事件后函数不会立即执行,而是在n秒后执行,如果在n秒内又触发了事件,则会重新计算函数执行时间。立即执行版的意思是触发事件后函数会......
  • lodash防抖的使用
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><scriptsrc="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>......
  • Vue防抖debounce
    在搜索框中随着输入内容而更新显示内容或者需要请求接口等逻辑时,如果每一个字符变化都去更新则会浪费一些没有必要的请求,想要的结果是某一个时间内不要去更新,就是常用的防抖测略Vue中防抖逻辑:在响应式的变量在包装一个响应式,新的响应式只有在一定时间到时才更新,具体如下export......
  • 创建一个Cookie缓存,进行接口防抖
    1.新创建一个Cookie缓存 Name:SavePInformationHttpCookienewCookie=newHttpCookie("request");newCookie["SavePInformation"]=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss");newCookie.Expires=DateTime.Now.AddDays(1);Response.Co......
  • 防抖&节流代码实现
    防抖函数设置一个定时器,当我们重复调用一次函数,我们就清除定时器,重新定时,直到在设定的时间段内没有重复调用函数//fn需要执行的方法//delay延时时间,默认给个500毫秒functiondebounce(func,delay){//定义一个定时器lettimer;returnfunction(){//返回一个闭包......