Poner a competir dos mirrors
Requisito
El mismo payload está disponible desde dos mirrors: el mirror de la UE responde en 60 ms, el de EE. UU. en 180 ms. Obtenlo lo más rápido posible y asegúrate de que el fetch lento no corre hasta completarse — demuéstralo contando los fetches completados bien después de la fecha límite del perdedor. Los mirrors están simulados en el código como streams cancelables; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
winner: payload from eu-mirror completed fetches: 1 loser fetch completed: false
Lado a lado
RxDart
FxDart
Por qué difieren
No difieren. La carrera es una idea push — suscríbete a todo,
quédate con quien hable primero, cancela el resto — y
FxEvents.race es exactamente eso,
igualando a Rx.race movimiento a movimiento: ambos
mirrors están genuinamente en vuelo, y en el momento en que el
mirror de la UE emite a los 60 ms la suscripción de EE. UU. se
cancela, su onCancel se dispara, y el temporizador
pendiente muere. Ambos paneles lo demuestran de la misma manera — el
conteo de fetches completados sigue siendo 1 mucho después de la
fecha límite de 180 ms del perdedor. El trabajo se detuvo, no
solo se ignoró, en ambos lados.
Una cadena pull solo puede negarse a arrancar el fetch de
respaldo, nunca cancelar uno en vuelo; la capa de eventos absorbe en
cambio el enfoque Rx: una cadena envoltorio fina sobre
Streams llanos que no colisiona con nada, rxdart
incluido. El catálogo de operadores de
RxDart sigue siendo mucho más amplio — fxdart mantiene pequeño el
núcleo de eventos y entrega el procesamiento por valor del ganador
al lado pull tipado vía .pull(). Para «gana el primero
en responder, los perdedores se cancelan», los dos 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.