gpt4 book ai didi

ios - Rxswift3.0 中的 throttle 和 debounce 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 00:35:43 46 4
gpt4 key购买 nike

看了很多关于 throttle 和去抖的博客。他们中的大多数人说他们是同一件事。但是我从我的例子中得到了不同的结果?这是示例:

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
.debounce(1, scheduler: MainScheduler.instance)
.subscribe(onNext: {print($0)})
.addDisposableTo(disposeBag)

结果是5。但是当我使用 throttle 时,结果是1

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
.throttle(1, scheduler: MainScheduler.instance)
.subscribe(onNext: {print($0)})
.addDisposableTo(disposeBag)

所以,我无法理解 throttle 操作器?

最佳答案

在 RxSwift 的早期版本中,throttledebounce 做同样的事情,这就是为什么你会看到文章说明这一点。在 RxSwift 3.0 中,它们做了类似但相反的事情。

debouncethrottle 都用于过滤 observable 随时间发出的项目。

  • throttle 仅发出时间窗口中可观察源发出的第一个项目。

  • debounce 仅在指定时间段过去后发出一个项目,而源可观察对象没有发出另一个项目。

两者都可用于减少可观察对象发出的项目数量;您使用哪个取决于您是想要在一个时间段内发出“第一个”还是“最后一个”值。

术语“去抖动”来自电子学,指的是开关触点在发生开关 Action 时在开和关之间快速“弹跳”的趋势。当您打开灯泡时,您不会注意到这一点,但微处理器每秒查看输入数千次,会在开关进入最终状态之前看到快速的“开”和“关”序列。这就是为什么 debounce 为您提供 5 的值;在您的时间范围内(1 毫秒)发出的最后一项。如果您在代码中设置时间延迟,使项目发射得更慢(相隔超过 1 毫秒),您会看到许多项目通过 debounce 发射。

在应用程序中,您可以使用 debounce 来执行昂贵的搜索(假设它需要网络操作)。用户要为他们的搜索字符串键入许多字符字符,但您不希望在他们输入每个字符时启动搜索,因为搜索成本很高,并且在他们返回时较早的结果将过时。使用 debounce,您可以确保仅在用户停止输入一段时间(比如 500 毫秒)后才发出搜索字符串。

您可能会使用 throttle 操作需要一些时间,并且您希望在该时间过去之前忽略进一步的输入。假设您有一个启动操作的按钮。如果用户快速连续多次点击按钮,您只想启动一次操作。您可以使用 throttle 忽略指定时间窗口内的后续点击。 debounce 也可以工作,但会在发出操作项之前引入延迟,而 throttle 允许您对第一个操作使用react并忽略其余操作。

关于ios - Rxswift3.0 中的 throttle 和 debounce 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43888296/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com