Dieses Muster deutet auf ein Leck oder unbegrenztes Wachstum hin. Nimm in den DevTools zwei Heap-Snapshots nach demselben Nutzerflow, vergleich die Retained Sizes und schau, was die abgetrennten DOM-Knoten festhält. Die üblichen Ursachen sind Listener und Subscriptions, die nie entfernt werden, Timer, die nach dem Unmount weiterlaufen, Caches, die nie etwas rauswerfen, und Closures, die große Objekte einfangen. Der Fix ist, alles abzubauen, was eine Komponente angelegt hat.
Warum Interviewer das fragen
Der Interviewer will einen methodischen Debugger, keinen Rater. Speicherprobleme lassen sich nicht durch reines Codelesen beheben, geprüft wird also, ob du das Werkzeug kennst: Heap-Snapshots, Allocation Timeline, abgetrennte Knoten und den Performance Monitor. Es prüft außerdem Lifecycle-Disziplin, weil die meisten Lecks in Single Page Apps von etwas kommen, das beim Mount aufgesetzt und nie aufgeräumt wurde.
So baust du deine Antwort auf
- Bestätige das Symptom mit einer Speichermessung, nicht mit einem Bauchgefühl.
- Beschreib den Vergleich über drei Snapshots entlang eines wiederholten Flows.
- Nenn die üblichen Verdächtigen, die du im Code prüfst.
- Erklär das Fix-Muster: jede Subscription bekommt ein Teardown.
Beispielantwort
Ich würde zuerst bestätigen, dass es Speicher ist und nichts anderes, ließe also den Performance Monitor offen und wiederhole den Flow, den die Nutzer beschreiben, mit Blick auf Heap sowie Listener- und Knotenzahlen. Steigen die und kommen auch nach einer erzwungenen Collection nicht zurück, ist es ein Leck. Dann nehme ich einen Heap-Snapshot, laufe den Flow zehnmal, nehme einen zweiten und vergleiche nach Retained Size. Abgetrennte DOM-Knoten sind der Verräter, und der Retainer-Pfad sagt mir, was sie festhält. In der Praxis ist es fast immer etwas, das ohne passendes Teardown aufgesetzt wurde: ein resize- oder scroll-Listener auf window, eine Socket-Subscription, ein Interval oder ein Observer, der die Komponente überlebt. Ich habe mal einen gefunden, bei dem eine Chart-Bibliothek pro Render einen Listener angehängt und beim Unmount nur einen entfernt hat, die Zahl wuchs also mit jeder Navigation. Das Fix-Muster ist langweilig, aber wirksam: alles, was in einem Effect entsteht, gibt sein Cleanup zurück, und jeder Cache bekommt ein Größenlimit statt ewig zu wachsen.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Was ist ein abgetrennter DOM-Knoten, und wie findest du heraus, was ihn festhält?
- Wie würdest du diese Bugklasse im Code Review verhindern?
- Wie unterscheidest du ein Leck von einem Cache, der schlicht groß ist?
Weitere Fragen für Frontend-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen