Esse padrão aponta para um vazamento ou crescimento sem limite. Tire heap snapshots no DevTools em dois pontos depois do mesmo fluxo de usuário, compare os tamanhos retidos e veja o que está segurando os nós de DOM desanexados. As causas usuais são listeners e assinaturas que nunca são removidos, timers que seguem rodando depois do unmount, caches que nunca expulsam nada e closures capturando objetos grandes. Corrija desmontando tudo que um componente criou.
Por que os entrevistadores perguntam isso
O entrevistador quer alguém metódico na depuração, não um chutador. Problemas de memória não se resolvem só lendo código, então ele checa se você conhece o ferramental: heap snapshots, linha do tempo de alocação, nós desanexados e o monitor de performance. Também sonda disciplina de ciclo de vida, já que a maioria dos vazamentos em single page apps vem de algo montado sem a limpeza correspondente.
Como estruturar sua resposta
- Confirme o sintoma com uma medição de memória, não com um palpite.
- Descreva a comparação de três snapshots sobre um fluxo repetido.
- Nomeie os suspeitos de sempre que você checa no código.
- Explique o padrão de correção: toda assinatura ganha um desmonte.
Exemplo de resposta
Primeiro eu confirmaria que é memória e não outra coisa, então deixaria o monitor de performance aberto e repetiria o fluxo que os usuários descrevem, observando o heap e as contagens de listeners e nós. Se elas sobem e nunca voltam depois de uma coleta forçada, é vazamento. Aí tiro um heap snapshot, rodo o fluxo dez vezes, tiro outro e comparo por tamanho retido. Nós de DOM desanexados são a pista, e o caminho de retenção me diz o que está segurando. Na prática é quase sempre algo montado sem o desmonte correspondente: um listener de resize ou scroll no window, uma assinatura de socket, um interval ou um observer que sobrevive ao componente. Encontrei um caso em que uma biblioteca de gráficos anexava um listener por renderização e removia só um no unmount, então a contagem crescia a cada navegação. O padrão de correção é sem graça mas eficaz: tudo criado num efeito retorna sua limpeza, e todo cache ganha um limite de tamanho em vez de crescer para sempre.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que é um nó de DOM desanexado e como você acha o que o retém?
- Como você preveniria essa classe de bug no code review?
- Como você distingue um vazamento de um cache que é simplesmente grande?
Mais perguntas para Desenvolvedor Frontend
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas