Node.js · Senior · Frage 5 von 75
Warum kann eine Closure unerwartet Speicher festhalten?
function handler(req) {
const hugeBody = req.body; // 50 MB
const id = hugeBody.id;
emitter.on("done", () => console.log(id));
}- 1Ein langlebiger Listener hält den Scope seiner Closure am Leben
- 2Closures werden immer samt vollem Call Stack kopiert
- 3Pfeilfunktionen lassen sich nie vom Garbage Collector entfernen
Antwort zeigen
Richtige Antwort: Ein langlebiger Listener hält den Scope seiner Closure am Leben
Erklärung
Der eigentliche Bug ist der Listener, der nie entfernt wird. V8 kann außerdem Variablen eines geteilten Kontexts am Leben halten. Entferne Listener, nutze once und fange keine großen Objekte ein.