Mensajes de error recientes, sin duplicados
Requisito
Un almacén de logs devuelve las entradas de más nueva a más antigua.
Muestra los tres mensajes de error distintos más
recientes: quédate solo con las entradas ERROR,
descarta las repeticiones de un mensaje ya mostrado y detente después
de tres. Los datos están en el código de abajo; ambas versiones deben
imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
09:41 payment gateway timeout 09:31 inventory service 503 09:17 invalid session token
Lado a lado
Dart nativo
FxDart
Por qué difieren
Dart no tiene un «distinto por clave»: deduplicar por mensaje significa
gestionar tú mismo un Set, así que la versión nativa se
convierte en un bucle con tres asuntos trenzados: la comprobación del
nivel, el truco del seen.add y un break con
contador. Cada uno por separado está bien; juntos te obligan a leer el
bucle entero para ver qué es lo que conserva. FxDart enuncia las tres
reglas como tres pasos de la cadena —filter,
uniqBy, take— y, como la cadena es perezosa,
también deja de recorrer el log en el momento en que encuentra el
tercer error distinto, exactamente igual que el break
escrito a mano.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana nativo
Memoria pico Empate
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í.