Listado de productos paginado
Requisito
El catálogo de una tienda pequeña: nombre, precio y bandera de disponibilidad. Muestra la página 2 de los productos en stock, ordenados por precio ascendente, tres por página — una línea por producto. Los datos están en el código de abajo; ambas versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
Page 2 of in-stock products: Milk Frother — $24.90 Cold Brew Jar — $27.80 Scale — $42.00
Lado a lado
Dart nativo
FxDart
Por qué difieren
Apenas difieren — esto es un empate, y conviene decirlo con claridad.
La paginación es exactamente la forma que el Iterable de
Dart ya cubre: skip y take se leen igual de
bien que el drop y el take de FxDart, y los
dos siguen siendo perezosos. La única arruga nativa es ordenar por una
clave — el núcleo de Dart necesita un comparador (el
sortedBy de package:collection cierra
incluso esa brecha). Elige FxDart aquí solo si el resto del código ya
habla su vocabulario; Dart nativo no pierde nada en esta tarea.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Gana nativo
N = 1,000,000
Tiempo Gana nativo
Memoria pico Gana nativo
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í.