Skip to content

Optimize computed reads and snapshot allocation in batches - #971

Draft
JoviDeCroock wants to merge 3 commits into
mainfrom
JoviDeCroock/preact-signals-perf-regression
Draft

Optimize computed reads and snapshot allocation in batches#971
JoviDeCroock wants to merge 3 commits into
mainfrom
JoviDeCroock/preact-signals-perf-regression

Conversation

@JoviDeCroock

@JoviDeCroock JoviDeCroock commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

Reuse batch snapshot nodes and skip snapshots for unobserved signals, eliminating steady-state snapshot allocation while preserving no-op batch reconciliation.
For lazy computed graphs read after writes in a batch, maintain an internal batch-lifetime notification graph so subsequent writes invalidate only affected paths without creating user-visible subscriptions.
Six-round CPU medians against the prior PR head improved large web app by 83.1% and wide dense by 64.7% with identical sums and computation counts, with coverage for dynamic dependencies, self-invalidation, watcher isolation, and exception cleanup.
Validation: pnpm build, pnpm lint, pnpm test (1,352 passed; 5 skipped), pnpm test:prod (1,352 passed; 5 skipped), and a 100-round differential stress test against the prior implementation.

@changeset-bot

changeset-bot Bot commented Aug 11, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c2e767d

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@preact/signals-core Patch
preact-signals-devtools Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@netlify

netlify Bot commented Aug 11, 2026

Copy link
Copy Markdown

Deploy Preview for preact-signals-demo ready!

Name Link
🔨 Latest commit c2e767d
🔍 Latest deploy log https://app.netlify.com/projects/preact-signals-demo/deploys/6a7c2a90908bca000772d62e
😎 Deploy Preview https://deploy-preview-971--preact-signals-demo.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Size Change: +1.66 kB (+0.8%)

Total Size: 209 kB

📦 View Changed
Filename Size Change
docs/dist/assets/bench-********.js 1.6 kB +2 B (+0.13%)
docs/dist/assets/client-********.js 46.6 kB +1 B (0%)
docs/dist/assets/devtools-********.js 911 B -4 B (-0.44%)
docs/dist/assets/EmbeddedDevtools-********.js 23.3 kB +280 B (+1.22%)
docs/dist/assets/index-********.js 8.52 kB +2 B (+0.02%)
docs/dist/assets/signals-core.module-********.js 2.2 kB +283 B (+14.78%) ⚠️
docs/dist/assets/signals.module-********.js 2.65 kB -6 B (-0.23%)
docs/dist/assets/Unmount-********.js 650 B -3 B (-0.46%)
docs/dist/assets/utils.module-********.js 523 B +1 B (+0.19%)
docs/dist/basic-********.js 247 B -2 B (-0.8%)
packages/core/dist/signals-core.js 2.21 kB +275 B (+14.2%) ⚠️
packages/core/dist/signals-core.mjs 2.21 kB +278 B (+14.39%) ⚠️
packages/devtools-ui/dist/devtools-ui.js 21.5 kB +273 B (+1.28%)
packages/devtools-ui/dist/devtools-ui.mjs 20.9 kB +277 B (+1.34%)
ℹ️ View Unchanged
Filename Size
docs/dist/assets/jsxRuntime.module-********.js 300 B
docs/dist/assets/preact.module-********.js 4.74 kB
docs/dist/assets/style-********.css 7.19 kB
docs/dist/nesting-********.js 1.15 kB
docs/dist/react-********.js 242 B
packages/debug/dist/debug.js 4.72 kB
packages/debug/dist/debug.mjs 4.24 kB
packages/devtools-adapter/dist/devtools-adapter.js 2.36 kB
packages/devtools-adapter/dist/devtools-adapter.mjs 2.07 kB
packages/preact-transform/dist/signals-transform.js 1.66 kB
packages/preact-transform/dist/signals-transform.mjs 1.61 kB
packages/preact-transform/dist/signals-transform.umd.js 1.77 kB
packages/preact/dist/signals.js 1.82 kB
packages/preact/dist/signals.mjs 1.75 kB
packages/react-transform/dist/signals-transform.js 7.63 kB
packages/react-transform/dist/signals-transform.mjs 6.78 kB
packages/react-transform/dist/signals-transform.umd.js 7.75 kB
packages/react/dist/signals.js 214 B
packages/react/dist/signals.mjs 165 B
packages/vite-plugin/dist/vite-plugin.js 8.86 kB
packages/vite-plugin/dist/vite-plugin.mjs 7.86 kB

compressed-size-action

@JoviDeCroock JoviDeCroock changed the title Optimize batch snapshot allocation Optimize computed reads and snapshot allocation in batches Aug 12, 2026
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