Solo importa la búsqueda más nueva

Empate async

Requisito

Un usuario teclea tres consultas — fx, luego fxdar 40 ms después, luego fxdart tras una pausa. Cada búsqueda tarda 150 ms, así que la segunda consulta llega mientras la primera búsqueda sigue en vuelo: el primer resultado debe descartarse, jamás mostrarse. Imprime solo los resultados supervivientes, y luego cuántas búsquedas arrancaron frente a cuántas se entregaron. El calendario está simulado en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.

Salida esperada
7 results for "fxdar"
12 results for "fxdart"
searches started: 3, results delivered: 2

Lado a lado

RxDart

FxDart

Por qué difieren

No difieren. «Lo más nuevo cancela lo más viejo» es una afirmación sobre suscripciones, y la capa fxEvents las tiene: su switchMap mapea cada consulta a un stream de búsqueda interno y des-suscribe el anterior en el momento en que llega una consulta más nueva, así que a un resultado obsoleto no le queda ningún oyente al que llegar. Arrancan tres búsquedas, sobreviven dos resultados, y nada de esa lógica aparece en el código del usuario — en ninguno de los dos paneles. Sin contador de épocas artesanal y sin contabilidad de terminación.

fxdart absorbe el enfoque Rx exactamente para esta clase de requisito: fxEvents es una cadena envoltorio fina sobre Streams llanos — nunca una extensión, así que convive con cualquier otra biblioteca de streams, rxdart incluido. El catálogo de operadores de RxDart sigue siendo mucho más amplio; cuando los resultados supervivientes necesiten procesamiento real por valor, cruza a la cadena pull tipada con .pull(). Para el caso de uso que define a switchMap, los paneles son equivalentes operador por operador: empate.

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.