10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

debounceとthrottleの違いについて

Last updated at Posted at 2021-06-17

はじめに

どうも@kaneko77です。
RxSwiftのオペレータでdebouncethrottleがあります。
こちら初めて見る人は違いが分かりずらいと思います。
今回はその二つのオペレーターの違いについて共有していきます。
それでは行ってみよ〜
※参考にしたサイトはこちらです。

説明

debounce

まずdebounceについての説明になります。
以下reactivexの引用です。

reactivex引用
http://reactivex.io/documentation/operators/debounce.html

別のアイテムを発行せずに特定の期間が経過した場合にのみ、Observableからアイテムを発行します

このように
指定の期間の間、まとまったイベントは最新値のみ流れるようになっています。
指定の期間の最後のアイテムのみを流すということですね。

throttle

debounceとは裏腹に連続したイベントは最初の
イベントだけ流してあとは指定期間の間無視します。
以下reactivexの引用です。

reactivex引用
http://reactivex.io/documentation/operators/debounce.html

指定された期間の連続する時間枠の間にObservableによって発行された最初のアイテムのみを発行するObservableを返します。

実践

この説明だと「はにゃ?」って感じだと思いますので実際にコードや実行結果を織り交ぜながらやっていきます。

debounce

self.mainView.login.rx.tap.asDriver()
    .debounce(.seconds(2))
    .drive{ _ in
        print("debounceボタンを押下した!!")
    }
    .disposed(by: disposeBeg)

throttle

self.mainView.login.rx.tap.asDriver()
    .throttle(.seconds(2), latest: false)
    .drive{ _ in
        print("throttleボタンを押下した!!")
    }
    .disposed(by: disposeBeg)

比較

こちらのログの結果を見ていただければ今回の対象のオペレーター
どういう性質を持っているか分かると思います。

debounce

デバウンスは連続したイベントは最新値のみ取得するため、
最新値から2秒後に処理を実行させています。

throttle

スロットルは最初に値が流れたものを流し処理を実行してから2秒後にまたイベントが一つ流れるということになっています。

終わりに

今回はよく私自身どっちがどっちだっけ?と
なってしまうdebouncethrottleの違いについて共有しました。
二つに共通して言えるのは 指定秒だけ一つのイベントしか流れない ということですね。
ここまで見ていただきありがとうございます。
少しでも皆さんのお役に立てればなと思います。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?