2 votes

Quelle est la différence entre le throttle et le debounce dans Rxswift3.0 ?

J'ai vu beaucoup de blogs sur le throttle et le debounce. La plupart d'entre eux disent que c'est la même chose. Mais j'obtiens un résultat différent dans mon exemple ? Voici l'exemple :

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

le résultat était 5. Mais quand j'ai utilisé l'accélérateur, le résultat était 1.

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

Donc, je ne comprends pas le fonctionnement de l'accélérateur ?

5voto

Paulw11 Points 11557

Dans les versions précédentes de RxSwift, throttle y debounce a fait la même chose, c'est pourquoi vous verrez des articles le précisant. Dans RxSwift 3.0 ils font une chose similaire mais opposée.

Ambos debounce y throttle sont utilisés pour filtrer les éléments émis par une observable dans le temps.

  • throttle émet uniquement le premier élément émis par l'observable source dans la fenêtre temporelle.

  • debounce n'émet un élément qu'après que la période de temps spécifiée se soit écoulée sans qu'un autre élément soit émis par l'observable source.

Les deux peuvent être utilisés pour réduire le nombre d'éléments émis par une observable ; le choix de l'un ou de l'autre dépend du fait que vous voulez la "première" ou la "dernière" valeur émise dans une période de temps.

Le terme "débordement" vient de l'électronique et fait référence à la tendance des contacts d'un interrupteur à "rebondir" entre l'état activé et l'état désactivé très rapidement lorsqu'une action de commutation se produit. Vous ne le remarquerez pas lorsque vous allumez une ampoule, mais un microprocesseur qui examine une entrée des milliers de fois par seconde verra une séquence rapide d'activations et de désactivations avant que le commutateur ne prenne son état final. C'est pourquoi debounce vous donne la valeur de 5 ; le dernier élément qui a été émis dans votre cadre temporel (1 ms). Si vous introduisiez un délai dans votre code pour que les éléments soient émis plus lentement (plus de 1 ms d'intervalle), vous verriez un certain nombre d'éléments émis en debounce .

Dans une application, vous pourriez utiliser debounce pour effectuer une recherche qui est coûteuse (par exemple, elle nécessite une opération réseau). L'utilisateur va saisir un certain nombre de caractères pour sa chaîne de recherche, mais vous ne voulez pas lancer une recherche au fur et à mesure qu'il saisit chaque caractère, car la recherche est coûteuse et les premiers résultats seront obsolètes au moment où il reviendra. Utilisation de debounce vous pouvez faire en sorte que la chaîne de recherche ne soit émise que lorsque l'utilisateur cesse de taper pendant un certain temps (disons 500 ms).

Vous pouvez utiliser throttle lorsqu'une opération prend un certain temps et que vous souhaitez ignorer toute autre entrée jusqu'à ce que ce temps se soit écoulé. Supposons que vous ayez un bouton qui déclenche une opération. Si l'utilisateur appuie sur le bouton plusieurs fois de suite, vous ne voulez lancer l'opération qu'une seule fois. Vous pouvez utiliser throttle pour ignorer les écoutes suivantes dans une fenêtre de temps spécifiée. debounce pourrait également fonctionner mais introduirait un délai avant l'émission de l'élément d'action, alors que throttle vous permet de réagir à la première action et d'ignorer les autres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X