bench(union): banco de carga de la unión de suscripciones

Ejecuta el worker de producción contra suscripciones sintéticas realistas
(península, Canarias, Baleares; radios de 5 a 100 km) y mide lo que la fase 12
pide: duración del recreate completo y del incrementalAdd, retraso máximo del
event loop del proceso padre —que es donde vive DDP y por tanto la pregunta
real de "¿se congela la web?"—, tamaño del documento frente al límite de 16 MiB
y pico de RSS.

`--spread world` reparte las suscripciones por todo el mundo: es el peor caso
para el tamaño, porque casi no se solapan y la unión conserva un polígono por
suscripción en vez de fundirlos.

treeUnionWorker.js es una variante solo del banco (une en árbol en vez de en
cadena) para poder comparar estrategias con números antes de tocar el worker
de verdad. El worker de producción solo cambia en que ahora acepta `steps` por
workerData, con el mismo 144 de siempre por defecto.
This commit is contained in:
vjrj 2026-08-01 21:51:27 +02:00
parent c92f25a9a6
commit 072e76aaed
4 changed files with 276 additions and 2 deletions

View file

@ -32,12 +32,18 @@ const ttrunc = require(workerData.turfPaths.truncate).default;
const truncOptions = { precision: 6, coordinates: 2 };
// Vértices por círculo. 144 es lo que se ha venido usando; es también la
// palanca más directa sobre el tamaño del documento y sobre lo que tarda la
// cadena de uniones, así que el banco de carga (bench/union-bench.js) necesita
// poder moverlo. Sin `steps` en workerData el comportamiento es el de siempre.
const DEFAULT_STEPS = 144;
const run = () => {
const { subs, baseUnion } = workerData;
const { subs, baseUnion, steps } = workerData;
const circles = subs.map(s => tcircle(
[s.location.lon, s.location.lat],
s.distance,
{ units: 'kilometers', steps: 144 }
{ units: 'kilometers', steps: steps || DEFAULT_STEPS }
));
let unionTemp = baseUnion || null;