Aplicar throttle al botón de refresco
Requisito
Un usuario machaca el botón de refresco: toques en 0/50/100/400/450/800 ms. Deja pasar como mucho un refresco por ventana de 300 ms, tomando el primer toque de cada ventana — de modo que se disparan exactamente tres refrescos (toques 0, 3 y 5). Imprime qué toques pasaron después de que el stream se cierre. El calendario de toques está simulado en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
refresh fired on tap 0 refresh fired on tap 3 refresh fired on tap 5 taps: 6, refreshes: 3
Lado a lado
RxDart
FxDart
Por qué difieren
No difieren. El throttling es limitar la tasa de llegadas en
el tiempo — una propiedad de cuándo ocurren los eventos, no de
los valores — y ambos paneles colapsan el requisito en un solo
operador sobre el stream de toques. El throttleTime(300ms)
de RxDart y el fxEvents(...).throttle(300ms) de fxdart
implementan la misma ventana de borde inicial (el primer toque emite
y abre la ventana, el resto de la ráfaga se traga; el borde final
está a una bandera de distancia en cualquiera de los dos lados), con
la suscripción, la contabilidad de ventanas y la terminación todas
dentro del operador.
fxdart absorbe deliberadamente el enfoque
Rx para el lado push: fxEvents es una cadena envoltorio
sobre Streams llanos — no una extensión, así que
convive con cualquier biblioteca de streams sin un solo conflicto de
miembros. El catálogo de operadores de RxDart sigue siendo mucho más
amplio que la capa de eventos de fxdart; para los verbos temporales
cotidianos como este, los dos son intercambiables. Si cada
toque superviviente tuviera luego que disparar trabajo async real y
tipado, .pull() llevaría el stream al pipeline
FxAsync dirigido por demanda.
Benchmark
Sin benchmark para este ejemplo. Este operador se define por el tiempo transcurrido, no por el trabajo realizado: ambos lados esperan las mismas ventanas, así que una barra estaría midiendo los temporizadores de Dart y no las librerías. Acortar las ventanas tampoco sirve — cuántos valores produce una ráfaga pasaría a depender de lo rápida que sea la máquina, y ya no se podría comprobar que ambos lados dan un resultado idéntico. Por eso los ejemplos construidos sobre operadores de temporización se dejan sin medir; los que solo usan retardos para simular E/S sí se miden, con esos retardos puestos a cero.