Toma hasta el marcador de apagado, inclusive
Requisito
El feed de eventos de esta noche contiene un marcador
SHUTDOWN; todo lo que viene después pertenece a la
siguiente ejecución y no debe aparecer en el informe. Conserva cada
evento hasta el marcador, este incluido, e imprime cada uno
como una línea event:. El feed está en el código; las dos
versiones deben imprimir las líneas que aparecen bajo
Salida esperada.
Salida esperada
event: boot event: listen :8080 event: GET /orders event: GET /health event: SIGTERM event: drain connections event: SHUTDOWN
Lado a lado
RxDart
FxDart
Por qué difieren
El takeWhile corriente tiene un problema de off-by-one
para este trabajo: el elemento que rompe el predicado es exactamente
el que todavía quieres. Ambas bibliotecas traen el arreglo inclusivo,
escrito desde extremos opuestos — el takeWhileInclusive
de RxDart sigue mientras no sea el marcador, el
takeUntilInclusive de FxDart (el takeUntil
de FxTS, renombrado por claridad en Dart) se detiene en el
marcador. El mismo corte, con el predicado invertido.
Los modelos hasta coinciden en lo que pasa después. Tras emitir el marcador, RxDart cancela la suscripción aguas arriba, así que los dos eventos rezagados nunca se entregan; FxDart simplemente deja de tirar, así que nunca se producen. Como en la búsqueda de presupuesto de la Parte 1, cancelación y demanda son las palabras de los dos modelos para la misma economía — nada aguas abajo puede saber qué modelo había debajo. Empate, y una pareja de traducción útil que conviene conocer al mover código entre los dos.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Gana RxDart
Las barras son medianas de iteraciones cronometradas repetidas en procesos nuevos por lado (los N pequeños se agrupan por resolución del temporizador). Dos lados a menos del 5% entre sí — o a menos de 0.6 ms, una diferencia que nadie puede percibir — cuentan como empate; las carreras relativas ajustadas se vuelven a medir hasta 5 veces. En una app, cualquier cosa por debajo de unos pocos milisegundos es invisible para el usuario, gane la barra que gane. La memoria es el RSS pico del proceso. La VM de Dart y el dataset son idénticos en ambos lados, así que la diferencia entre las dos barras es lo que retiene el pipeline en sí.