memory-leaks clear - Strumenti per il debug delle perdite di memoria in JavaScript




detect usage (4)

Ho un problema di perdita di memoria in un progetto JavaScript piuttosto complesso e spero che ci siano strumenti che potrebbero aiutarmi a individuare la causa del problema.

Ho provato la scheda Profilo dello sviluppatore di Google Chrome Tool, in cui è possibile scattare istantanee dell'HEAP e diffarlo con le istantanee precedenti (consulta http://www.youtube.com/GoogleDevelopers#p/c/B9EC47A6AAE4540F/1/OxW1dCjOstE per un jumpstart su quella funzione).

Posso vedere la memoria svuotare con questo strumento ma da lì non riesco a trovare un modo per rilevare dove sono conservati i riferimenti ai miei oggetti (probabilmente in chiusure).

La mia domanda è: quali strumenti utilizzate per il debugging della perdita di memoria JavaScript? C'è uno strumento che potrebbe farmi vedere i riferimenti e un po 'di codice sorgente di dove sono detenuti?


Answers

Controlla questo -> http://ejohn.org/blog/deep-tracing-of-internet-explorer/ Funziona solo su IE anche se

Modifica: Link al prodotto -> http://ajax.dynatrace.com/ajax/en/



Mi sembra di imbattersi spesso in questo problema e non ho mai davvero una buona risposta se non selezionando i breakpoint intelligenti nel tuo javascript. A volte c'è uno strumento per la tua situazione specifica che può aiutare a trovare il problema, altre volte per me è un lungo processo per trovare la perdita.

Guarda il profiler di allocazione in Chrome DevTools che ti fornisce un'interfaccia per le tue allocazioni e ti consente di tornare ai loro conservatori.

Ecco una buona lista di strumenti di perdita per Mozilla . Inoltre, ci sono alcuni screencast su come utilizzare gli strumenti . In particolare, potresti essere interessato alla sezione "Post-elaborazione delle tracce dello stack" in quanto menziona la possibilità di ottenere simboli migliori e informazioni sul nome del file / numero di riga da una traccia dello stack.

Se stai usando Internet Explorer su Windows, ecco un rilevatore di perdite di memoria JavaScript che potrebbe rivelarsi utile.

Infine, ho trovato questo bel strumento su github chiamato MemoryLeakChecker dopo aver letto un post qui , che cerca strutture di dati di grandi dimensioni e cerca di aiutarti a individuare dove stai perdendo memoria.

Spero che questo aiuti e fammi sapere quale (se esiste) finirà per aiutarti. Ci scusiamo per la mancanza di collegamenti ipertestuali reali, perché ho meno di 10 reputazione in questo momento non riesco a metterli tutti nel post.


Sembra che non ci sia alcun operatore di clone profondo ideale per oggetti di tipo array. Come illustra il codice sottostante, il cloner jQuery di John Resig trasforma le matrici con proprietà non numeriche in oggetti che non sono matrici, e il cloner JSON di RegDwight elimina le proprietà non numeriche. I seguenti test illustrano questi punti su più browser:

function jQueryClone(obj) {
   return jQuery.extend(true, {}, obj)
}

function JSONClone(obj) {
   return JSON.parse(JSON.stringify(obj))
}

var arrayLikeObj = [[1, "a", "b"], [2, "b", "a"]];
arrayLikeObj.names = ["m", "n", "o"];
var JSONCopy = JSONClone(arrayLikeObj);
var jQueryCopy = jQueryClone(arrayLikeObj);

alert("Is arrayLikeObj an array instance?" + (arrayLikeObj instanceof Array) +
      "\nIs the jQueryClone an array instance? " + (jQueryCopy instanceof Array) +
      "\nWhat are the arrayLikeObj names? " + arrayLikeObj.names +
      "\nAnd what are the JSONClone names? " + JSONCopy.names)




javascript memory-leaks