👷

Web Workers — How to Use Multi-Threading in JavaScript

Structured Clone of postMessage and SharedArrayBuffer

JavaScript is single-threaded. Heavy computation on main thread freezes UI. Web Workers solve this.

postMessage Data Transfer

Structured Clone (default): deep copy. 1GB array = 1GB copy cost.

Transferable Objects: ownership transfer. No copy, but original becomes unusable.

SharedArrayBuffer: shared memory. Both threads access same memory simultaneously. Atomics API for synchronization. COOP/COEP headers required.

No DOM Access

Workers can't access document or window. UI updates must be sent back via postMessage.

Why Tooscut Uses Workers

Tooscut transfers OffscreenCanvas to a Worker, runs WASM compositor with WebGPU rendering inside — exactly this pattern.

Key Points

1

Create separate thread with new Worker("worker.js")

2

Send data via postMessage — Structured Clone (default) or Transferable (ownership transfer)

3

Worker computes then returns result via postMessage

4

SharedArrayBuffer for shared memory — Atomics for sync (COOP/COEP required)

Use Cases

Image processing — run resize/filters in Worker to keep UI responsive WASM inference — run AI model inference in Worker (background-removal-js pattern)

References