Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Encontre memória retida depois que uma cena deveria terminar

Um jogo de navegador pode parecer normal durante uma rodada e ainda reter objetos a cada reinício de fase. Nós de interface desconectados, listeners de eventos esquecidos, callbacks de animação e referências a dados de cenas antigas podem manter objetos acessíveis na memória. Uma única medição do heap tem muito ruído e não prova um vazamento; procure um padrão repetível após sessões equivalentes e confirme se objetos suspeitos continuam referenciados depois do fim de sua vida útil prevista.

Nesta página

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

Continue jogando.

Jogos grátis no navegador, prontos quando você quiser. Encontre um de que goste e faça dele seu próximo favorito.

Siga sua curiosidade