39 lines
1.5 KiB
Markdown
39 lines
1.5 KiB
Markdown
---
|
|
epic: 13
|
|
story: 13.3
|
|
title: "Web Worker Offloading (Web Only)"
|
|
status: draft
|
|
---
|
|
|
|
## Epic 13 — Performance & Reliability
|
|
**Goal:** Instant evaluation, never lose work.
|
|
|
|
### Story 13.3: Web Worker Offloading (Web Only)
|
|
|
|
As a web CalcPad user,
|
|
I want the calculation engine to run in a Web Worker,
|
|
So that the main thread remains free for rendering and the UI never freezes during heavy computation.
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
**Given** the web version of CalcPad is loaded in a browser
|
|
**When** the application initializes
|
|
**Then** the calcpad-engine WASM module is instantiated inside a dedicated Web Worker
|
|
**And** the main thread contains no evaluation logic
|
|
|
|
**Given** a user types an expression on the main thread
|
|
**When** the input is sent to the Web Worker for evaluation
|
|
**Then** the result is returned via postMessage to the main thread
|
|
**And** the main thread renders the result without blocking on computation
|
|
|
|
**Given** the Web Worker is processing a large sheet (500+ lines)
|
|
**When** the user continues typing on the main thread
|
|
**Then** keystrokes are captured and rendered with zero perceptible lag
|
|
**And** pending evaluation requests are queued or debounced so the latest input is always processed
|
|
|
|
**Given** the Web Worker crashes or becomes unresponsive
|
|
**When** the main thread detects the worker has not responded within 5 seconds
|
|
**Then** the worker is terminated and a new worker is spawned
|
|
**And** the current sheet state is re-sent to the new worker for evaluation
|
|
**And** the user sees a brief non-blocking notification that the engine was restarted
|