Skip to content

diffr web: size the worker pool per browser and release the engine when idle - #1093

Open
milanb17 wants to merge 2 commits into
claude/project-thread-hwb7l0from
claude/diffr-web-mobile-perf
Open

milanb17 wants to merge 2 commits into
claude/project-thread-hwb7l0from
claude/diffr-web-mobile-perf

Conversation

@milanb17

Copy link
Copy Markdown
Contributor

Summary

Size diffr web's worker pool for the browser it runs in, and let the compiled engine go when the pool is idle. Stacks on #1022; merge #1022 first.

iOS Safari        → 1 worker, replaced past 256 MB
Android Chrome    → 2 workers with 8 GB or more, else 1; 384 MB
Desktop, < 8 GB   → up to 2 workers; 512 MB
Desktop           → cores − 1, at most 8; 1 GB
  • iOS kills a tab over its memory budget, often well under 1 GB, instead of failing the allocation, and reports neither memory nor cores. Before this, a phone got the desktop pool: several workers, each allowed 1 GB of wasm memory that never shrinks.
  • When the last idle worker goes, the page drops its compiled module too. Compiling again takes 50–110 ms, so the next file barely notices, and the memory can be reclaimed.

Evidence

  • iPhone 17 Pro simulator, vite v5.3.0...v5.4.0 (217 files), cold loads, Safari's process footprint sampled every 2 s.
  • With the release instrumented: it fires about 13 s after load with no workers left. A cold compile took 48–107 ms; three in-page recompiles took 51–60 ms each.
  • Memory during an idle 3-minute session is the same with and without the release (within ~50 MB run-to-run noise): Safari doesn't collect the dropped module while the page is idle. It gave back 56 MB as soon as the next compile allocated.
  • Browser typecheck and lint pass. No tests cover the pool.

Merge Danger

Door: two-way; revert the commits.

Blast Radius: diffr web's worker pool. Phones and small desktops diff large comparisons with fewer workers, so slower but within memory. Every device recompiles the engine (~0.1 s) for the first file after 3 idle seconds.

Agent-Session: 5eb4067a-b2f6-4508-a6dd-0471ff2c14d1
Agent-Session: 429958d8-68f3-4f68-bd3b-a8371e7feb8e
The page kept the compiled module after its pool went idle so the next
file's worker could start without a compile. On iOS that module held
about 170 MB, while compiling again takes 50-110 ms in the simulator. The
module now goes with the last worker.

Agent-Session: 429958d8-68f3-4f68-bd3b-a8371e7feb8e
Agent-Session: 5eb4067a-b2f6-4508-a6dd-0471ff2c14d1

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant