Skip to content

Defer passive effect cleanup on unmount - #5196

Merged
JoviDeCroock merged 2 commits into
mainfrom
JoviDeCroock/review-workspace-changes
Aug 7, 2026
Merged

Defer passive effect cleanup on unmount#5196
JoviDeCroock merged 2 commits into
mainfrom
JoviDeCroock/review-workspace-changes

Conversation

@JoviDeCroock

@JoviDeCroock JoviDeCroock commented Aug 6, 2026

Copy link
Copy Markdown
Member

Resolves #1886
Resolves #4299

This defers the cleanups from useEffect to happen after paint rather than synchronously mixed with layout-effects. This requires an update to ecosystem packages to also specify the second argument to options.unmount which is mainly used for options._catchError 😅

EDIT: ah, we can get rid of the second argument actually 5805b61

@JoviDeCroock
JoviDeCroock force-pushed the JoviDeCroock/review-workspace-changes branch 3 times, most recently from 2281f40 to 946d2ec Compare August 6, 2026 18:28
@JoviDeCroock
JoviDeCroock force-pushed the JoviDeCroock/review-workspace-changes branch 2 times, most recently from 547ee9a to f1ac086 Compare August 6, 2026 19:51
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Size Change: +75 B (+0.47%)

Total Size: 16 kB

📦 View Changed
Filename Size Change
hooks/dist/hooks.mjs 1.57 kB +75 B (+5.01%) 🔍
ℹ️ View Unchanged
Filename Size
compat/dist/compat.mjs 3.89 kB
debug/dist/debug.mjs 3.88 kB
devtools/dist/devtools.mjs 274 B
dist/preact.mjs 5.01 kB
jsx-runtime/dist/jsxRuntime.mjs 861 B
test-utils/dist/testUtils.mjs 473 B

compressed-size-action

@coveralls

coveralls commented Aug 6, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 99.299% (+0.008%) from 99.291% — JoviDeCroock/review-workspace-changes into main

@JoviDeCroock
JoviDeCroock force-pushed the JoviDeCroock/review-workspace-changes branch from f1ac086 to d5191eb Compare August 7, 2026 02:59
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

📊 Tachometer Benchmark Results

Summary

duration

  • create10k: unsure 🔍 -0% - +1% (-0.97ms - +5.21ms)
    preact-local vs preact-main
  • filter-list: unsure 🔍 -1% - +1% (-0.13ms - +0.24ms)
    preact-local vs preact-main
  • hydrate1k: slower ❌ 0% - 2% (0.02ms - 1.30ms)
    preact-local vs preact-main
  • many-updates: unsure 🔍 -4% - +1% (-0.71ms - +0.18ms)
    preact-local vs preact-main
  • replace1k: unsure 🔍 -2% - +1% (-1.19ms - +0.63ms)
    preact-local vs preact-main
  • text-update: unsure 🔍 -0% - +8% (-0.00ms - +0.14ms)
    preact-local vs preact-main
  • todo: unsure 🔍 -1% - +1% (-0.42ms - +0.23ms)
    preact-local vs preact-main
  • update10th1k: unsure 🔍 -3% - +4% (-1.07ms - +1.39ms)
    preact-local vs preact-main

usedJSHeapSize

  • create10k: unsure 🔍 -0% - +0% (-0.01ms - +0.04ms)
    preact-local vs preact-main
  • filter-list: unsure 🔍 -0% - +0% (-0.01ms - +0.00ms)
    preact-local vs preact-main
  • hydrate1k: unsure 🔍 -5% - +1% (-0.24ms - +0.04ms)
    preact-local vs preact-main
  • many-updates: unsure 🔍 +0% - +0% (+0.00ms - +0.00ms)
    preact-local vs preact-main
  • replace1k: unsure 🔍 -0% - +0% (-0.00ms - +0.00ms)
    preact-local vs preact-main
  • text-update: unsure 🔍 -3% - +4% (-0.03ms - +0.04ms)
    preact-local vs preact-main
  • todo: unsure 🔍 +0% - +0% (+0.00ms - +0.00ms)
    preact-local vs preact-main
  • update10th1k: unsure 🔍 -0% - +0% (-0.00ms - +0.01ms)
    preact-local vs preact-main

Results

create10k

duration

VersionAvg timevs preact-localvs preact-main
preact-local835.60ms - 840.05ms-unsure 🔍
-0% - +1%
-0.97ms - +5.21ms
preact-main833.56ms - 837.84msunsure 🔍
-1% - +0%
-5.21ms - +0.97ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local19.25ms - 19.27ms-unsure 🔍
-0% - +0%
-0.01ms - +0.04ms
preact-main19.23ms - 19.26msunsure 🔍
-0% - +0%
-0.04ms - +0.01ms
-
filter-list

duration

VersionAvg timevs preact-localvs preact-main
preact-local16.49ms - 16.84ms-unsure 🔍
-1% - +1%
-0.13ms - +0.24ms
preact-main16.55ms - 16.67msunsure 🔍
-1% - +1%
-0.24ms - +0.13ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local1.57ms - 1.58ms-unsure 🔍
-0% - +0%
-0.01ms - +0.00ms
preact-main1.58ms - 1.58msunsure 🔍
-0% - +0%
-0.00ms - +0.01ms
-
hydrate1k

duration

VersionAvg timevs preact-localvs preact-main
preact-local55.01ms - 55.99ms-slower ❌
0% - 2%
0.02ms - 1.30ms
preact-main54.43ms - 55.25msfaster ✔
0% - 2%
0.02ms - 1.30ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local5.00ms - 5.10ms-unsure 🔍
-5% - +1%
-0.24ms - +0.04ms
preact-main5.02ms - 5.28msunsure 🔍
-1% - +5%
-0.04ms - +0.24ms
-
many-updates

duration

VersionAvg timevs preact-localvs preact-main
preact-local16.38ms - 16.78ms-unsure 🔍
-4% - +1%
-0.71ms - +0.18ms
preact-main16.44ms - 17.24msunsure 🔍
-1% - +4%
-0.18ms - +0.71ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local3.76ms - 3.76ms-unsure 🔍
+0% - +0%
+0.00ms - +0.00ms
preact-main3.76ms - 3.76msunsure 🔍
-0% - -0%
-0.00ms - -0.00ms
-
replace1k
  • Browser: chrome-headless
  • Sample size: 100
  • Built by: CI #5807
  • Commit: 46ddd2f

duration

VersionAvg timevs preact-localvs preact-main
preact-local55.43ms - 56.68ms-unsure 🔍
-2% - +1%
-1.19ms - +0.63ms
preact-main55.68ms - 57.00msunsure 🔍
-1% - +2%
-0.63ms - +1.19ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local3.03ms - 3.03ms-unsure 🔍
-0% - +0%
-0.00ms - +0.00ms
preact-main3.03ms - 3.03msunsure 🔍
-0% - +0%
-0.00ms - +0.00ms
-

run-warmup-0

VersionAvg timevs preact-localvs preact-main
preact-local27.24ms - 28.01ms-unsure 🔍
-3% - +1%
-0.70ms - +0.37ms
preact-main27.42ms - 28.16msunsure 🔍
-1% - +3%
-0.37ms - +0.70ms
-

run-warmup-1

VersionAvg timevs preact-localvs preact-main
preact-local32.58ms - 33.90ms-unsure 🔍
-6% - +0%
-1.89ms - +0.03ms
preact-main33.47ms - 34.87msunsure 🔍
-0% - +6%
-0.03ms - +1.89ms
-

run-warmup-2

VersionAvg timevs preact-localvs preact-main
preact-local31.13ms - 32.72ms-unsure 🔍
-7% - +0%
-2.26ms - +0.11ms
preact-main32.12ms - 33.88msunsure 🔍
-0% - +7%
-0.11ms - +2.26ms
-

run-warmup-3

VersionAvg timevs preact-localvs preact-main
preact-local25.88ms - 26.18ms-unsure 🔍
-1% - +1%
-0.15ms - +0.30ms
preact-main25.79ms - 26.13msunsure 🔍
-1% - +1%
-0.30ms - +0.15ms
-

run-warmup-4

VersionAvg timevs preact-localvs preact-main
preact-local26.68ms - 27.74ms-unsure 🔍
-4% - +1%
-1.19ms - +0.28ms
preact-main27.16ms - 28.18msunsure 🔍
-1% - +4%
-0.28ms - +1.19ms
-

run-final

VersionAvg timevs preact-localvs preact-main
preact-local20.94ms - 21.33ms-unsure 🔍
-2% - +1%
-0.32ms - +0.21ms
preact-main21.01ms - 21.37msunsure 🔍
-1% - +2%
-0.21ms - +0.32ms
-
text-update
  • Browser: chrome-headless
  • Sample size: 220
  • Built by: CI #5807
  • Commit: 46ddd2f

duration

VersionAvg timevs preact-localvs preact-main
preact-local1.79ms - 1.89ms-unsure 🔍
-0% - +8%
-0.00ms - +0.14ms
preact-main1.73ms - 1.82msunsure 🔍
-7% - +0%
-0.14ms - +0.00ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local1.05ms - 1.11ms-unsure 🔍
-3% - +4%
-0.03ms - +0.04ms
preact-main1.05ms - 1.10msunsure 🔍
-4% - +3%
-0.04ms - +0.03ms
-
todo

duration

VersionAvg timevs preact-localvs preact-main
preact-local32.71ms - 33.18ms-unsure 🔍
-1% - +1%
-0.42ms - +0.23ms
preact-main32.82ms - 33.27msunsure 🔍
-1% - +1%
-0.23ms - +0.42ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local1.28ms - 1.28ms-unsure 🔍
+0% - +0%
+0.00ms - +0.00ms
preact-main1.28ms - 1.28msunsure 🔍
-0% - -0%
-0.00ms - -0.00ms
-
update10th1k

duration

VersionAvg timevs preact-localvs preact-main
preact-local31.75ms - 33.27ms-unsure 🔍
-3% - +4%
-1.07ms - +1.39ms
preact-main31.38ms - 33.31msunsure 🔍
-4% - +3%
-1.39ms - +1.07ms
-

usedJSHeapSize

VersionAvg timevs preact-localvs preact-main
preact-local2.99ms - 3.00ms-unsure 🔍
-0% - +0%
-0.00ms - +0.01ms
preact-main2.98ms - 3.00msunsure 🔍
-0% - +0%
-0.01ms - +0.00ms
-

tachometer-reporter-action v2 for CI

@JoviDeCroock
JoviDeCroock force-pushed the JoviDeCroock/review-workspace-changes branch from d5191eb to 46ddd2f Compare August 7, 2026 03:16
@JoviDeCroock
JoviDeCroock merged commit 7c9b0fa into main Aug 7, 2026
13 checks passed
@JoviDeCroock
JoviDeCroock deleted the JoviDeCroock/review-workspace-changes branch August 7, 2026 08:18
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.

Unmount hooks should be called during the commit phase to ensure consistency with React useLayoutEffect teardown runs after new elements are mounted

3 participants