Event Loop — Spec-Compliant Microtask/Macrotask Drain + RAF/Idle #98
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#98
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?
Issue #98 — Event Loop — Spec-Compliant Microtask/Macrotask Drain
Problembeschreibung
Der Browser hat keinen spec-konformen Event Loop. Aktuell gibt es:
SimpleRAF(src/fakes/simple-raf.ts) — simuliert requestAnimationFrame via setIntervalqueueMicrotask()Promise-Verhalten (keinawait-Drain)setTimeout,setInterval,setImmediateohne PriorisierungrequestIdleCallback) fehlenWarum das blockiert:
_drainAsyncGenerators()pollt alle 50ms — kein spec-konformer Microtask-DrainrequestIdleCallbackfür non-critical ScriptsDOMContentLoaded,loadEvent-Timing ist inkorrektArchitektur-Analyse
Aktueller Stand
Stabilizer:
Das ist nicht spec-konform. Der Spec sagt:
Lösungsansätze
Option A — Full Spec Event Loop (Empfohlen)
Eigener EventLoop-Klasse mit:
Task Sources (nach Spec):
Processing Model (exakt nach Spec):
Integration in Page:
Vorteile:
Nachteile:
Option B — SimpleRAF + Stabilizer verbessern
Bestehende Komponenten optimieren:
requestAnimationFrame-Timing (16ms frames, nicht setInterval)Vorteile: Minimaler Code (~200 Zeilen)
Nachteile: Niemals spec-konform, Framework-Inkompatibilitäten bleiben
Option C — Hybrid: Mikro-Processing per Page
Entscheidung
Option A — Full Spec Event Loop. Der Event Loop ist fundamental für spec-konformes Browser-Verhalten. SimpleRAF + Stabilizer zu flicken lohnt nicht — wir brauchen die korrekte Task-Queue-Ordnung.
Akzeptanzkriterien
Betroffene Dateien
src/fakes/simple-raf.tssrc/pages/stabilizer.tssrc/event-loop/event-loop.tssrc/event-loop/task-queue.tssrc/event-loop/microtask-queue.tssrc/event-loop/render-steps.tssrc/pages/page.tssrc/runtime-isolation.tstests/unit/event-loop.test.tstests/integration/event-loop.test.tsDependencies
queueMicrotaskfür interne Microtask-Queue?Technische Risiken
Performance-Impact
Testplan
Unit (25+)
Integration (15+)
E2E (3+)