Listado de productos paginado

Empate

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

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 5.9 µs
FxDart 6.5 µs

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 17.1 MB

N = 10,000

Tiempo Empate

Dart nativo 815 µs
FxDart 818 µs

Memoria pico Gana nativo

Dart nativo 17.7 MB
FxDart 21.5 MB

N = 1,000,000

Tiempo Gana nativo

Dart nativo 101.3 ms
FxDart 111.9 ms

Memoria pico Gana nativo

Dart nativo 177.8 MB
FxDart 196.4 MB

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í.