Este artigo descreve os vazamentos de memória do JavaScript e as habilidades de gerenciamento de memória, que são muito práticas. Compartilhe para sua referência. Os métodos específicos são os seguintes:
O conteúdo deste artigo é do Google Webperf (London Webperf Group), 26 de agosto de 2014.
De um modo geral, os aplicativos da Web JavaScript eficientes devem ser suaves e rápidos. Qualquer aplicativo que interaja com os usuários precisa considerar como garantir que a memória seja usada com eficiência, porque, se consumido demais, a página falhará, forçando o usuário a recarregar. E você só pode se esconder no canto e chorar.
A coleta automática de lixo não substitui o gerenciamento eficaz da memória, especialmente em aplicativos da Web grandes e de longa duração. Neste artigo, demonstraremos como gerenciar efetivamente a memória através do Devtools do Chrome.
E aprenda a resolver problemas de desempenho, como vazamentos de memória, pausas de coleta de lixo frequentes e inchaço geral de memória, coisas que realmente custam a energia.
Addy Osmani mostra muitos exemplos em seu ppt que causará vazamentos de memória no Chrome V8:
1) Exclua uma propriedade de objeto para desacelerar esse objeto (consumindo 15 vezes mais memória)
var o = {x: 'y'}; excluir ox; // Neste momento O se tornará um ox de objeto lento; // var o = {x: 'y'}; o = null; // Isso deve ser2) Fechamento
Ao introduzir variáveis fora do fechamento no fechamento, esse objeto não pode ser coletado de lixo (GC) quando o fechamento terminar.
var a = function () {var maior = nova matriz (1000000) .Join ('x'); return function () {return maioresr; }} ();3) DOM vazamento
Quando o COM original é removido, a referência do sub-nó não pode ser reciclada se não for removida.
var select = document.QuerySelector; var Treeref = select ('#árvore'); // Na árvore com, Leafref é um nó filho de Treefre var leafref = select ('#folha'); var corpo = selecione ('corpo'); body.RemoveChild (Treeref); // A árvore#não pode ser reembolsada porque o Treeref ainda está lá // Solução: Treeref = NULL; // A árvore não pode ser reembolsada porque o Leafref ainda está lá, leafref = null; // Agora #tree pode ser lançado.4) Timers Counting (Determination) Vazamento do timer
Os temporizadores também são lugares comuns onde ocorrem vazamentos de memória:
for (var i = 0; i <90000; i ++) {var buggyObject = {Callagain: function () {var ref = this; var val = setTimeout (function () {ref.callagain ();}, 90000); }} buggyobject.callagain (); // Embora você queira reciclar, o timer ainda é buggyobject = null;}5) Memória de depuração
A ferramenta de depuração de memória do Chrome pode facilmente visualizar o uso e os vazamentos de memória:
Clique em gravar na linha do tempo -> Memória:
Espero que este artigo seja útil para a programação de Javascript de todos.