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.