JS防抖和节流,你真的搞清楚了吗?

很多时候,我们都会觉得防抖和节流是一回事,其实不然,他们还是有很大区别的。

首先说防抖,当一个按钮,你拼命点击,我就不处理,等你什么时候消停了,我取你最后一次点击作为有效的,然后请求后台接口,这个就是防抖。

实际开发中,我们直接使用 lodash 的 debounce 函数来实现防抖。

// 例如,下面是一个带有搜索框的页面,并且需要在用户停止输入 500 毫秒后才开始搜索:
function search(keyword) {
  // 根据关键词进行搜索
  console.log(`Searching for '${keyword}'...`)
}

const inputEl = document.getElementById('search-input');

// 创建 debounce 函数,最多每 500 毫秒执行一次 search 函数
const debouncedSearch = _.debounce(search, 500);

// 监听 input 变化,如果有变化则调用 debouncedSearch 函数
// 每当出现输入变化时,我们会将输入内容传递给 `debouncedSearch` 函数,这个函数会将搜索操作延迟 500 毫秒后执行。因此,只有用户停止输入 500 毫秒之后,才会真正执行搜索操作
inputEl.addEventListener('input', (evt) => {
  const keyword = evt.target.value.trim();
  debouncedSearch(keyword);
});

再来说节流,比如我有一个拖拽的div,我希望每当拖拽发生时,要时刻获取div的XY轴的坐标,比如叫做getPosition函数。因为浏览器的运行速度是极快的,当拖拽发生时,就会过于频繁的触发,这样就很浪费性能,也没必要。

于是,我们希望每隔100ms就触发一次,而不是时刻都在触发,这种有节奏的触发,就是节流。

节流函数可以限制一个函数在一定时间范围内最多执行一次。也就是说,如果同一个函数在短时间内多次触发,这个函数只会以固定的频率执行。

实际开发中,我们直接使用 lodash 的 throttle 函数来实现节流。

// 例如,下面是一个点击按钮时,最多每隔 1 秒输出一次 log 的示例:
function log() {
  console.log('Clicked!');
}

const btnEl = document.getElementById('click-button');

// 创建 throttle 函数,最多每 1 秒执行一次 log 函数
const throttledLog = _.throttle(log, 1000);

// 监听 click 事件,如果有点击则调用 throttledLog 函数
// 每当用户点击按钮时,我们会调用 `throttledLog` 函数,这个函数会通过限制函数的执行频率,保证每隔 1 秒钟输出一条日志。即使用户连续点击按钮,也只有第一次点击可以触发函数的执行,后续的点击都会被忽略
btnEl.addEventListener('click', (evt) => {
  throttledLog();
});

所以,防抖和节流看似很像,很多人以为是一回事,其实不然。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90956.html

(0)
guozi's avatarguozi
上一篇 2024年6月7日 下午1:42
下一篇 2024年6月7日 下午1:58

相关推荐

  • 竞价赚钱怎么做

    在如今的网络行业中,竞价赚钱已经成为了一个热门话题。但是,什么是竞价?竞价赚钱的原理又是什么?如何选择和使用竞价平台?制定有效的竞价策略又需要怎样的技巧?这些问题都将在接下来的内容…

    行业资讯 2024年3月31日
    0
  • 如何查看域名有没有被墙,怎么看域名是否被墙

    您是否曾经尝试访问某个网站却发现无法打开?这很可能是因为域名被阻止了。那么什么是被屏蔽的域名呢?如果您想知道自己想要访问的网站是否被屏蔽了,我们该如何查询呢? 什么是域名被墙? 您…

    行业资讯 2024年5月13日
    0
  • 如何选择适合大型建站公司的云服务器?

    在当今互联网时代,随着云计算技术的发展,云服务器已经成为大型建站公司不可或缺的重要工具。然而,在众多的云服务器提供商中,如何选择适合自己公司的云服务器却是一项具有挑战性的任务。什么…

    行业资讯 2024年3月22日
    0
  • vps ip被墙,ip检测被墙

    5.商业竞争:在某些情况下,IP封锁也可能是出于商业竞争的目的。为了获得市场优势,一些公司可能会使用技术措施来阻止竞争对手的网站或服务在某些地区可用。 6、误操作:最后,误操作也可…

    行业资讯 2024年5月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注