[DONE] MutationObserver Microtask-Batching — bereits in Happy DOM 20.10.5 implementiert #30
Labels
No labels
bug
docs
feature
housekeeping
html-spec
performance
react-compat
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
glow-all/true-headless-browser#30
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
React batcht
setState-Aufrufe in einer Microtask-Queue. Wenn der State committed wird, mutiert React das DOM synchron (appendChild, setAttribute, etc.). Danach erwartet React, dassMutationObserver-Callbacks einmal pro Batch feuern — nicht 50x einzeln.Aktuelles Verhalten in Happy DOM:
element.appendChild(child)→ ruft sofortobserver.callback([mutation])aufErwartetes Verhalten (realer Browser):
appendChild-Aufrufe erzeugen 50 MutationRecords[record1, record2, ..., record50]Option A: Happy DOM fork / monkey-patch (Empfohlen)
Happy DOMs
MutationObserver-Implementierung liegt inMutationObserver._sendRecord()und wird von jedem DOM-Setter aufgerufen.Vorteile: Minimaler Eingriff, nutzt Bun natively Event-Loop, kein externer Scheduler nötig.
Nachteile: Keine.
Option B: Eigener Scheduler
Eigenen
MicrotaskQueue-Manager bauen, der alle asynchronen Callbacks sammelt und priorisiert.Nachteile: Overengineering. Bun/JSC Event-Loop macht das bereits korrekt — wir müssen nur aufhören, synchron dazwischenzufunken.
Akzeptanzkriterien
MutationObserverfeuert Callback einmal nach synchronem DOM-Batchmutation.oldValueundattributeNamebleiben korrektdisconnect()bricht pending Microtask abtakeRecords()liefert auch pending RecordsBetroffene Dateien
node_modules/happy-dom/lib/MutationObserver.js_sendRecord()→ queueMicrotask + pending-Flagsrc/fakes/patch-mutation-observer.tstests/unit/mutation-observer-batch.test.tsTests
Cross-Referenzen
Notizen
HAPPY-DOM-BATCHING.md — Referenz zu Happy DOMs internem MO-Mechanismus.
MutationObserver Microtask-Batching — React setState bricht zusammento [DONE] MutationObserver Microtask-Batching — bereits in Happy DOM 20.10.5 implementiert