2016-01-22 9 views
8

Sospetto che la mia app javascript di una pagina contenga una perdita di memoria da qualche parte. I dispositivi deboli con Firefox o Chrome sembrano eventualmente bloccati se la pagina viene lasciata aperta. Sto cercando di determinare se il ricaricamento della pagina dovrebbe liberare la memoria o meno.Diagnosi di perdite di memoria con caricamento della pagina

Capisco che la gestione della memoria è specifica per il browser, quindi la risposta potrebbe essere diversa in Chrome o Firefox.

NOTA: Riconosco che i browser sono menzionati molto in questa domanda (che sarebbe fuori tema), ma il punto di questa domanda riguarda il javascript debugging, che penso sia molto in discussione.

+0

si può mostrare alcun codice in cui si sospetta che potrebbe essere contenuta? – depperm

+0

Questo aiuto? http://stackoverflow.com/questions/19621074/finding-javascript-memory-leaks-with-chrome (in caso contrario, si prevede che l'aggiornamento ripulirà l'utilizzo della memoria, di solito ci si preoccupa della perdita di memoria all'interno di una "app a pagina singola" ") – mczepiel

+0

@mczepiel Grazie che è utile ma non sembra affrontare la domanda specifica sulla ricarica della pagina. Ma il tuo parentetico ... puoi approfondire ciò in una risposta? – emersonthis

risposta

2

Blocco browser/bug di estensione, i browser liberano risorse quando non sono più necessarie; Firefox elimina compartments, Chrome elimina processes e lo spazio di archiviazione associato.

Firefox fa del suo meglio, ma può richiedere un certo tempo per cancellare la memoria e può creare zombie compartments all'occasione:

scompartimenti sono distrutti quando sono garbage collection. Questo succede qualche tempo dopo che l'ultimo riferimento a loro scompare. Ciò significa che può esserci un ritardo tra la chiusura di una pagina e la scomparsa dei suoi scomparti ...

A volte, a causa di bug in Firefox, nell'SDK e/o negli add-on aggiuntivi, vengono creati compartimenti che non vengono mai distrutti . Si tratta di un tipo particolare di perdita di memoria e fanno aumentare gradualmente l'utilizzo della memoria di Firefox nel tempo, rallentandolo e rendendo più probabile l'arresto anomalo.

Chrome utilizza un processo per scheda (e in realtà sottoprocessi per alcune entità all'interno di una scheda e anche IIRC, ad esempio plugin, iframe, ecc.) Con lo stesso effetto. Anche se un controllo rapido su chrome://memory-redirect/ e l'aggiornamento di una scheda è simile allo stesso pid. Quindi un aggiornamento non è una lavagna completamente pulita.

FWIW Chrome ha un "Forza Reload" che cancella la cache e potrebbe essere sia utile per la compensazione più memoria o un placebo: cmd-shift-r

io non sono davvero familiarità con i meccanismi interni, ma ho visto solo cose non viene liberato in modo affidabile tra gli aggiornamenti quando uno particular browser sta diventando troppo intelligente e sta tentando di preservare le cose quando non si cambiano le origini ecc. nel tentativo di aumentare le prestazioni di carico.

In breve, si potrebbe incappare in un bug del browser se non si vede la memoria liberata come previsto, ma si vorrebbe usare i vari strumenti "about: memory" per verificare che ea quel punto sarebbe essere su di voi a avoid such behavior and/or report the issue to the browser's dev team.

Altrimenti, penso che sia meglio servirti indirizzando le tue perdite di memoria all'interno della pagina utilizzando i vari strumenti disponibili.

0

Un buon modo per eseguire il debug dell'utilizzo delle risorse di JS consiste nell'utilizzare il monitor delle prestazioni di Firefox all'interno dello strumento di ispezione. Firefox Dev Edition has more in-depth tools

Premere F12 quando sulla pagina e fare clic sull'icona del piccolo tachimetro nella finestra di ispezione; questo aprirà il monitor delle prestazioni. Premi il pulsante "Avvia registrazione" e Firefox inizierà a confrontare tutti i tempi degli script, l'attività CSS, l'input dell'utente ecc. Nella pagina.

Quando si ritiene che sia rimasto in funzione abbastanza a lungo, interrompere la registrazione e verranno visualizzati tutti i dati.Nella parte superiore verrà visualizzato un grafico che mostra le prestazioni ed è possibile fare clic su qualsiasi parte ed esaminare tutti gli script in esecuzione in quel momento.

A full tutorial for the performance tools can be found here