Loading documentation…
Loading documentation…
Sheetwrite alone at scale — Handsontable cannot complete these sizes headlessly:
Identical columnar datasets, per-operation warmup and iteration plans. Fresh instance per ingest; window reads rotate offsets to defeat caches; sort and filter reset between runs; Handsontable edits run with rendering suspended so only its data path is timed.
Memory = JS-heap delta around one ingest in an isolated subprocess, plus Sheetwrite's WASM linear-memory delta.
ingestwindowReadeditsortfilteraggregateReproduce with:
bun run --filter @sheetwrite/bench bench:dataOver 100,000 source rows, the SUM/AVERAGE build takes 28.873 ms median (30.493 ms p95), versus 0.0017 ms median (0.0116 ms p95) for an incremental value edit. The matrix has 3 row fields, 1 column field, and 2 value fields. Build and incremental edit timings describe different operations on the same engine, not a 0.5-versus-0.6 speedup.
| Measurement | Bytes |
|---|---|
| Before pivot | 9.0 MiB |
| With pivot | 13.6 MiB |
| Pivot increment | 4.6 MiB |
Retained engine allocation is not process peak RSS. Each edit sample is normalized per edit by the capture harness. The harness checks pivot status and edited aggregates before accepting its measurements.
Reproduce with:
bun run --filter @sheetwrite/bench bench:pivot -- --output results/pivot-results.json