No SPA, o que acontece em termos de memória e desempenho quando o usuário pula em todas as páginas?

5

Imagine uma aplicação web gigantesca construída usando uma estrutura de aplicativo de página única, como o AngularJS. Com cada rota, ele faz o download de alguns arquivos de modelo HTML. Cada um desses arquivos de modelo contém arquivos JS exclusivos para ele. Então, agora, quando cada um desses arquivos de modelo fizer o download, ele também extrairá e baixará os arquivos JS.

Esta é apenas uma situação hipotética para entender como os navegadores funcionariam em tal situação.

O que acontecerá em termos de memória e desempenho quando o usuário pular rapidamente em todas as páginas (que podem ter centenas ou milhares de páginas)? Todas as variáveis JS consumirão a memória e a obstruirão desnecessariamente ou o JS Garbage Collector virá ao resgate?

    
por Temp O'rary 15.01.2016 / 14:41
fonte

1 resposta

3

Depende do seu código JavaScript e do seu DOM (e, em princípio, da implementação do JavaScript no navegador; convide seus usuários a usar as versões recentes dos navegadores). Você precisa ler mais sobre técnicas de coleta de lixo (por exemplo, o Manual do GC ), consulte GC do Mozilla SpiderMonkey página.

Um valor que ainda é indiretamente acessível a partir de variáveis globais ou locais não será coletado como lixo. O GC seguirá referências em valores agregados (incluindo fechamentos , matrizes, objetos, ...).

Você pode querer cuidadosamente e habilmente usar referências fracas , por exemplo JavaScript WeakMap s.

Conceitualmente , o GC está computando o fechamento transitivo do gráfico de referência, a partir de variáveis globais e locais (na pilha de chamadas). Estes valores estão vivos e os valores mortos são eventualmente destruídos pelo CG, já que são lixo . Um valor que só é alcançável através de referências fracas não será mantido.

Mesmo com um GC, um programa pode ter um vazamento de memória , em particular se ele mantém em alguma variável um valor que nunca seria útil no futuro. E detectar isso através das técnicas análise de código estático é um problema indecidível , comprovadamente equivalente ao problema de parada .

    
por 15.01.2016 / 14:48
fonte