Aplicar debounce al buscador
Requisito
Un usuario teclea f, fx, fxd
en una ráfaga rápida, hace una pausa, y luego teclea
fxdart. Busca solo cuando el tecleo haya estado en
silencio 160 ms — de modo que corren exactamente dos búsquedas
(fxd y fxdart) — e imprime cada resultado.
El calendario de pulsaciones está simulado en el código; las dos
versiones deben imprimir las líneas que aparecen bajo
Salida esperada.
Salida esperada
3 results for "fxd" 12 results for "fxdart"
Lado a lado
RxDart
FxDart
Por qué difieren
No difieren. Este es un problema push en su forma más
pura — lo interesante no son los valores sino cuándo dejan
de llegar — y ambos paneles lo dicen de la misma
manera: aplicar debounce al stream de eventos con 160 ms,
buscar cada consulta superviviente, recoger. RxDart lo escribe
debounceTime; fxdart lo escribe
fxEvents(...).debounce(...). Operador por operador, las
dos cadenas son equivalentes, hasta en el valor final vaciado al
cerrar.
Es deliberado: la capa de eventos de fxdart absorbió el enfoque Rx
para el lado push. fxEvents es una cadena envoltorio
fina sobre Streams de Dart llanos — nunca una
extensión, así que no colisiona con nada, rxdart incluido — que da a
los operadores basados en tiempo un hogar que los pipelines pull con
razón se negaron a ser. El catálogo de operadores de RxDart sigue
siendo mucho más amplio; fxdart cubre los verbos push cotidianos y
se detiene ahí. Y cuando las consultas con debounce deban alimentar
trabajo tipado y dirigido por demanda — fetches concurrentes
ordenados, manejo de errores tipado — .pull() es la
puerta de vuelta al pipeline FxAsync.
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.