问题标签 [debouncing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
123 浏览

javascript - 去抖击穿

我在网上找到了以下代码,我正在尝试实现它以与调整大小事件侦听器一起使用,并且正在努力理解它的工作原理的复杂性。有人愿意把它分解成只有 3 个月的 JS/Jquery 经验的人会理解吗?关于我正在努力解决的问题的一些指针(这是大部分,但我将定义真正令人困惑的部分)“参数”或它的值已分配给的变量“args”在哪里定义?如何将“立即”传递给去抖动功能。等等等等

0 投票
0 回答
111 浏览

javascript - 消除多次点击

如果所有验证都正确,我有一个发送邮件的代码。我只需要阻止用户多次单击它。因此我尝试使用 debounce 并确认 debounce 正在调用我的函数,但它也无济于事。我究竟做错了什么?当快速连续点击时,我总是让弹出窗口一个接一个地出现。

0 投票
1 回答
2122 浏览

redis - 如何创建分布式“去抖动”任务来耗尽 Redis 列表?

我有以下用例:多个客户端推送到共享的 Redis 列表。一个单独的工作进程应该耗尽这个列表(进程和删除)。等待/多执行以确保顺利进行。

出于性能原因,我不想立即调用“drain”进程,而是在 x 毫秒后,从第一个客户端推送到(然后为空)列表的那一刻开始。

这类似于分布式下划线/lodash debounce函数,定时器在第一个项目进入的那一刻开始运行(即:“领先”而不是“尾随”)

我正在寻找以容错方式可靠地做到这一点的最佳方法。

目前我倾向于以下方法:

  1. Redis SetNXandpx方法一起使用。这允许:
    • 仅将值(互斥锁)设置为专用键空间(如果尚不存在)。这就是nx参数的用途
    • 在 x 毫秒后使密钥过期。这就是px参数的用途
  2. 1如果可以设置该值,则此命令返回,这意味着以前不存在任何值。否则它会返回0。A1表示当前客户端是自 Redis 列表耗尽后第一个运行该进程的客户端。所以,
  3. 此客户端将作业放在计划在 x 毫秒内运行的分布式队列中。
  4. x 毫秒后,接收作业的工作人员开始排空列表的过程。

这在纸上有效,但感觉有点复杂。还有其他方法可以使这项工作以分布式容错方式工作吗?

顺便说一句:Redis 和分布式队列已经到位,所以我不认为在这个问题上使用它是一个额外的负担。

0 投票
1 回答
1407 浏览

javascript - 角度条件手表是否调用去抖动方法不起作用

我有以下角度手表来观察范围变量,我执行以下操作。我使用 debounce 将请求捆绑到后端。

当这个 myQuery 返回 undefined 时,我不需要这个 debounce,而是需要直接执行后端调用。

现在去抖动没有正确捆绑我的请求。

0 投票
0 回答
559 浏览

javascript - 最快的去抖实现

我在我的应用程序中为滚动事件附加了一些繁重的功能。为了限制它的执行频率,我使用了这样的简单去抖动方法:

有一个更好的方法吗?每次事件触发时,setTimeout 本身是否太重而无法调用?

编辑:我最关心的是内存使用 - 我认为每个 setTimeout 都在分配一些。这是来自 chrome 时间轴的内存分配(来自这个小提琴:http: //jsfiddle.net/hky0oekm/):

在此处输入图像描述

0 投票
2 回答
1239 浏览

jquery - 用户停止输入后运行函数

在我的应用程序中,我想根据地址更新谷歌地图并放置用户类型。因为我不希望应用程序每次用户输入 1 个字母时都更改地图,所以我搜索了一些东西来降低函数调用的数量。因为超时只会延迟对函数的调用(该函数将被调用,就好像它没有延迟一样),我搜索了替代方案并找到了 jQUery debounce,我尝试像这样实现它:

但我不断收到以下错误:

参考以下行:

我做错了什么,并且在这种情况下要消除抖动?

更新:

Roko C. Buljan 的回答是有效的,去抖插件也一样

去抖插件代码:

0 投票
2 回答
71220 浏览

javascript - jQuery中的去抖动功能

我正在尝试使用 Ben Alman 的 jquery 去抖动库来去抖动按钮的输入。 http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/

目前这是我拥有的代码。

问题是当我单击按钮时,该功能永远不会执行。我不确定我是否误解了某些东西,但据我所知,我的代码与示例匹配。

0 投票
1 回答
135 浏览

javascript - 在连续函数中使用 jQuery 的加载

我正在尝试在名为#RECALRow1、#RECALCol1、#RECALBodySum 的表中填充不同的单元格。每个都是从数据库中填充的。我正在使用 AJAX,特别是 jQuery 的负载。

最初我使用了一些函数——见下面的版本 1——它们有效(这些函数中的代码在版本 2 中有效)。这行得通。

我很晚才意识到这些函数中的代码有多么相似。版本 2 显示了没有函数的代码,说明了相似性。这也奏效了。(valTable 已在前面定义 - 定义未在下面显示)。

然后似乎“很明显”我应该编写一个只接受两个参数的通用函数。用不同的参数对该函数进行三次调用,肯定可以工作(!)事实上,似乎只调用了第三个函数;前两个甚至没有成功生成控制台消息。

我想知道我是否在回调中遗漏了一些东西 - 我阅读了如何从异步调用返回响应?- 但我看不出我需要它们。也许我将要学习一些非常基础的实用 AJAX 知识。

版本 1

单独的函数,每个函数都使用 jQuery 加载。这行得通。[旁白 - ASP 设置默认选择值]

版本 2

直接调用jQuery加载,无需封装。这行得通。[除此之外 - 我们需要调整默认选择值]

版本 3

通用函数,它使用 jQuery 加载。这不起作用

0 投票
3 回答
1788 浏览

bash - 如何中断或消除 inotifywait 循环?

我有一个小脚本,可以使用inotifywait. 当某些事情发生变化时,一批文件会通过一个大约需要十秒钟运行的过程(编译、压缩、重组等)发送。

考虑以下示例:

如果您touch oli-test在另一个终端中运行几次,您会看到每个循环在继续之前完成。那个场景对我来说非常真实。如果我在文件正在处理时忘记保存文件,或者发现错误,事件会堆积起来,我正在等待几分钟。

令我震惊的是,有两种技术可以客观地使这个工作流程变得更好。我不确定什么是最简单或最好的,所以我将两者都介绍:

  1. 中断之前的运行,并立即重新启动。脚本化过程目前只是一组内联命令。我可以将它们分解为 Bash 函数,我并不热衷于将它们分解得更远。

  2. 对等待处理的事物列表进行去抖动处理,以便如果同时发生五个事件(或在它已经在处理时),它只会再次运行一次。

(或者两者都......因为我确信在某些情况下两者都会有用)

我也对不同的方法持开放态度,inotifywait但它们需要给我相同的结果并在 Ubuntu 上工作。

0 投票
18 回答
31534 浏览

c# - C# 事件去抖动

我正在收听硬件事件消息,但我需要对其进行去抖动以避免太多查询。

这是一个发送机器状态的硬件事件,我必须将其存储在数据库中以用于统计目的,有时它的状态会经常变化(闪烁?)。在这种情况下,我只想存储一个“稳定”状态,我想通过在将状态存储到数据库之前等待 1-2 秒来实现它。

这是我的代码:

我将这种行为称为“去抖动”:等待几次以真正完成它的工作:如果在去抖动时间内再次触发相同的事件,我必须关闭第一个请求并开始等待去抖动时间以完成第二个事件。

管理它的最佳选择是什么?只是一个一次性计时器?

要解释“去抖动”功能,请查看关键事件的这个 javascript 实现:http: //benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/