Node.js · Senior · Pytanie 5 z 75
Dlaczego domknięcie może nieoczekiwanie zatrzymywać pamięć?
function handler(req) {
const hugeBody = req.body; // 50 MB
const id = hugeBody.id;
emitter.on("done", () => console.log(id));
}- ✓Poprawna odpowiedź: Listener żyje na długowiecznym emiterze, a domknięcie trzyma swój zakres (i być może
hugeBody) dla każdego żądania - 2Domknięcia zawsze kopiują pełny stos wywołań
- 3Funkcje strzałkowe nie mogą zostać odśmiecone
Wyjaśnienie
Prawdziwy błąd to listener, którego nigdy nie usunięto. V8 może też trzymać zmienne współdzielonego kontekstu. Usuwaj listenery, używaj once i nie przechwytuj dużych obiektów.