chunk, chunkOn & chunkEvery
Recoge eventos en listas — por cantidad, por disparador o por reloj — para que un stream parlanchín se convierta en unas pocas llamadas agrupadas.
Lección
Agrupar es la mejora de rendimiento más barata que tiene un stream
parlanchín. Cien eventos de analítica son cien viajes de ida y vuelta uno
a uno, y dos viajes en lotes de cincuenta; el trabajo es idéntico, el
coste no. La capa pull agrupa por cantidad con
chunk, y eso es todo lo que puede
hacer: un pipeline pull no tiene reloj, así que «todo lo que ha pasado en
los últimos dos segundos» no es una pregunta que pueda formular.
El lado push sí puede. chunk(count) es esa misma agrupación
de tamaño fijo, con un último lote corto que se vacía cuando la fuente se
cierra para que no quede nada varado.
chunkEvery(window) agrupa por tiempo en su
lugar: lo que haya llegado en la última ventana se emite como una lista. Y
chunkOn(trigger) entrega la decisión a un segundo stream:
agrupa cuando el usuario hace scroll, cuando termina el frame, cuando
vuelve la conexión.
Las dos formas gobernadas por el tiempo callan ante una ventana
vacía. Un tic que no encuentra nada acumulado no emite nada en
lugar de una lista vacía, así que el código de aguas abajo nunca tiene que
filtrar lotes que significan «no ha pasado nada»: la misma regla de
honestidad que sigue
sampleOn. Lo que siga acumulado
cuando la fuente se cierre se vacía antes del cierre.
Capa de eventos de fxdart, siguiendo a bufferCount,
buffer y bufferTime de Rx. La familia conserva
el chunk de la capa pull como palabra raíz —un nombre para
una idea en las dos mitades de la biblioteca— con el sufijo
…On para un disparador y …Every para un reloj.
Demo 1 · Agrupar por reloj
Demo 2 · Por cantidad y por disparador
Pruébalo tú
Ejercicio: un resumen por ventana en vez de un informe por clic.