面试必问防抖节流

防抖节流作为性能优化的大能,面试几乎是必考,我建议不仅要好好看,还要自己上手写一下它的代码。

我这里我简单的例子向大家介绍这两个的概念,为的就是大家都能看懂还一下就能记住。

防抖:当事件触发后,等待一段时间才会执行,如果等待时间内再次触发则重新记时。

例如:一个输入框,用户输入内容会显示和输入相关的提示:

如果是需要向后端拿数据,那么这个提示其实就是触发了接口请求。

防抖就是在用户停止输入内容一段时间后再向后端发送请求,防止用户快速输入内容导致前端一直向后端不断发送请求

代码:

js 复制代码
<body>

<input type="text" id="input" placeholder="Type here">

<script>
function debounce(func, delay) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  };
}

// 获取输入框元素
const inputElement = document.getElementById('input');

// 创建一个处理输入事件的函数
function handleInput() {
  console.log('Input value:', inputElement.value);
  // 在这里可以添加需要处理的逻辑
}

// 使用防抖函数包装输入事件处理函数,并设置延迟时间为 300 毫秒
const debouncedInputHandler = debounce(handleInput, 2000);

// 监听输入事件,并应用防抖处理
inputElement.addEventListener('input', debouncedInputHandler);
</script>

</body>

节流:多次触发事件后,每隔一段时间执行一次

例如:一个登陆按钮,你点击登陆它没反应,你就一直快速点击发现登陆进去了,其实它设定了时间间隔,假设前端设置了5s,那5s内你怎么点击都不会触发事件,5s后才会触发事件。

代码:

js 复制代码
<body>

    <ul>
        <li id="li">点击</li>
    </ul>
    <script>
function throttle(func, delay) {
  let timer;
  return function() {
    if (!timer) {
      func.apply(this, arguments);
      timer = setTimeout(() => {
        timer = null;
      }, delay);
    }
  };
}

// 使用节流函数包装需要节流处理的函数,并设置时间间隔为 500 毫秒
const throttledClickHandler = throttle(handleClick, 3000);

// 在实际使用中,例如监听点击事件时使用节流函数
 document.getElementById('li').addEventListener('click', throttledClickHandler);

function handleClick(){
    console.log('click');
}
    </script>
</body>

将func的this绑定到document.getElementById('li'),这和显示绑定有关。

说到底节流就是你被硬控了几秒,这段时间你动不了,时间过了才能动。

相关推荐
hepherd6 分钟前
Flask学习笔记 - 模板渲染
前端·flask
LaoZhangAI6 分钟前
【2025最新】Manus邀请码免费获取完全指南:5种稳定渠道+3个隐藏方法
前端
经常见7 分钟前
浅拷贝与深拷贝
前端
梅子酱~12 分钟前
Vue 学习随笔系列二十二 —— 表格高度自适应
javascript·vue.js·学习
前端飞天猪12 分钟前
学习笔记:三行命令,免费申请https加密证书📃
前端
关二哥拉二胡14 分钟前
前端的 AI 应用开发系列二:手把手揭秘 RAG
前端·面试
斯~内克16 分钟前
前端图片加载性能优化全攻略:并发限制、预加载、懒加载与错误恢复策略
前端·性能优化
你的人类朋友16 分钟前
JS严格模式,启动!
javascript·后端·node.js
奇怪的知识又增长了25 分钟前
Command SwiftCompile failed with a nonzero exit code Command SwiftGeneratePch em
前端
Maofu25 分钟前
从React项目 迁移到 Solid项目的踩坑记录
前端