Worker measurements
Recorded September 20, 2026 — P7
These results describe the original snapshot, not the current source or release. Local artifact paths are provenance records, not public downloads.
Archive index · Current support
Worker protocol v1 executed plan v1 with ABI v6. The comparison included an optional AsyncTask prototype that lacked the production executor lifecycle.
Recorded validation
Apple M1 Pro/macOS arm64, Node 24.19.0, pnpm 12.4.2 and Rust 1.96.0. Release checks passed with 1,877 TS, 11 Rust and three registry tests. They covered four modes/eight dtypes, snapshots after mutation/detachment, plan mutation, subviews, eight extras, concurrency, intrinsic metadata, queues/budgets, cancel/dispose races, late responses and independent outputs. Real Worker fixtures covered exits, hangs, computation errors, malformed results, startup timeouts/protocol mismatch and missing assets. Delayed termination tests verified reservations remained until recovery, and failed replacements rejected pending tasks without endless retries. Empty-queue/maxQueue-zero replacement passed.
Tarball and missing-native Worker fallback checks passed. The extension rehearsal passed. The independent owned-Vec AsyncTask prototype passed clippy and snapshot mutation/detachment checks. Chromium/WebKit passed 28 tests; Firefox's 14 failed at startup, before page assertions. Other native/minimum-Node evidence remained open.
Node comparison
The historical bench:p7 run included the optional prototype and recorded 108 timings, ten responsiveness groups, and 80 memory observations, with seven samples after two warmups. It covered three/64 nodes and 1K/256K/1M elements, four modes, copy/structuredClone, startup, synchronous submission and total latency. Node and browser measurements ran separately. Current commands are bench:workers for production models and bench:async-task to reproduce the full comparison.
For 1,048,576 f32 elements, end-to-end medians in ms:
| Backend | Nodes | Sync | Worker | AsyncTask prototype | Worker submission |
|---|---|---|---|---|---|
| native scalar | 3 | 1.042 | 1.508 | 0.947 | 0.416 |
| native NEON | 3 | 0.136 | 0.378 | 0.225 | 0.175 |
| Wasm scalar | 3 | 4.089 | 4.342 | — | 0.184 |
| Wasm SIMD128 | 3 | 0.397 | 0.691 | — | 0.172 |
| native scalar | 64 | 333.116 | 335.058 | 317.688 | 0.307 |
| native NEON | 64 | 17.960 | 18.631 | 22.986 | 0.233 |
| Wasm scalar | 64 | 223.778 | 224.853 | — | 0.239 |
| Wasm SIMD128 | 64 | 18.550 | 19.014 | — | 0.194 |
The four cold Worker startups were 22.0–24.7 ms, single observations rather than stable distributions. AsyncTask had lower overhead for short native cases but not a universal advantage, and omitted production queue/budget/lifecycle costs. Worker was chosen to reuse the complete engine, Wasm fallback and shared browser lifecycle/recovery protocol, not because it was always the fastest binding.
For 64 nodes/1M elements, maximum 2 ms timer-gap medians were:
| Backend | Sync gap ms | Worker gap ms | Median timer ticks during Worker execution |
|---|---|---|---|
| native scalar | 332.790 | 2.386 | 148 |
| native NEON | 18.277 | 2.320 | 9 |
| Wasm scalar | 223.767 | 2.351 | 100 |
| Wasm SIMD128 | 19.561 | 2.308 | 9 |
Synchronous execution had zero timer ticks during computation. AsyncTask native scalar/NEON gaps were 2.371/2.323 ms. Main-thread responsiveness improved while snapshot/submission and total completion costs remained.
Browser and memory observations
Chromium/WebKit ran separately with three samples per mode, 1M f32 elements, 64 add nodes and scalar Wasm. Outputs were checked as 65. Medians:
| Browser | Sync duration ms | Worker duration ms | Frames during sync/Worker | Max sync/Worker frame gap ms |
|---|---|---|---|---|
| Chromium | 226.6 | 232.5 | 0 / 13 | 216.8 / 16.8 |
| WebKit | 237 | 237 | 0 / 14 | 238 / 27 |
Frame timestamps depend on refresh rate, scheduling and load; three samples do not establish cross-device statistics. Raw data was saved to artifacts/p7/browser-responsiveness.json; functional browser evidence was separate.
Each mode completed 20 single-input 1M tasks with reservedBytes returning to zero. The reservation high-water mark was 16,781,312 bytes, matching four times input bytes plus 4096. Whole-process RSS was about 341.9–345.9 MiB in native phases and 397.3–400.6 MiB in Wasm phases. It included all engines, Workers, AsyncTask and prior allocations awaiting GC, not a per-task or per-Worker measure.
The prototype was unpublished and absent from dist/package files. Logs, native prototype and browser evidence lived under artifacts/p7/; the complete checkpoint was artifacts/baseline/p7-2026-09-20/. Overall status remained failed due to Firefox.