Repita um ciclo de vida propositalmente
Capture uma linha de base após o carregamento, jogue o mesmo nível curto, retorne ao menu e repita essa rota exata várias vezes. Use ferramentas de memória do navegador para comparar instantâneos tirados no mesmo ponto após a limpeza e a coleta de lixo, quando as ferramentas permitirem. Procure contagens crescentes de um tipo de objeto específico, como nós de cena, em vez de reagir apenas à memória total.
Execute o teste uma vez com as ferramentas do desenvolvedor fechadas e uma vez abertas se a própria medição parecer mudar o comportamento. O sinal útil é se as mesmas classes e caminhos retidos se acumulam ao longo dos ciclos, e não se um instantâneo tem um número maior que o de outra máquina.
Defina a desmontagem de cada cena
Quando uma cena terminar, cancele o frame de animação pendente, pare os temporizadores, remova listeners registrados em objetos de vida mais longa e limpe as coleções que guardam as entidades da cena. Mantenha referências aos callbacks para poder removê-los ou agrupe listeners relacionados com um AbortController e cancele o grupo ao desmontar a cena.
Teste a transição: entre e saia de uma cena, acione a entrada antiga e confirme que a cena anterior não reage mais. Verifique também se os recursos em cache são compartilhados ou liberados intencionalmente. Uma limpeza indiscriminada pode causar recargas desnecessárias; uma referência mantida por engano pode deixar uma cena grande na memória.
Perguntas sobre vazamento de memória do jogo do navegador
O aumento da memória prova um vazamento?
Não. Navegadores reservam memória e coletam objetos de acordo com seu próprio cronograma. Um vazamento fica mais provável quando repetições equivalentes retêm cada vez mais instâncias por meio de uma referência que o código ainda mantém.
A remoção de um ouvinte de evento pode ajudar na limpeza?
Sim, quando um objeto de vida longa mantém um callback que referencia dados da cena. A MDN documenta removeEventListener() e também explica como passar um AbortSignal para remover um grupo de listeners de uma só vez.
Leitura complementar
Viu alguma informação desatualizada? Informar uma correção