2010-01-26 11 views

risposta

21

Per quanto riguarda il consumo di memoria

Le perdite di memoria in JavaScript sono di solito ignorati tranne quando si trasformano in perdite di memoria del browser (cioè, anche dopo che l'utente si sposta lontano dal pagina, la memoria continua allocata e non c'è modo di liberarla). La ragione di ciò è che mentre la tua applicazione web potrebbe avere perdite di memoria, gli utenti passeranno da una pagina all'altra in modo da ridurre al minimo le perdite. Tuttavia, potrebbero non riavviare il browser, quindi le perdite di memoria del browser potrebbero essere gravi. Qualche codice JavaScript è noto per causare perdite di memoria su alcuni browser, essendo Internet Explorer probabilmente il peggiore in quest'area. Per questo potresti trovare Microsoft JavaScript Memory Leak Detector molto utile.

volte quanto riguarda

IE, Chrome e Safari hanno costruito in profiler negli strumenti di sviluppo web forniti con il browser. Per Firefox è possibile utilizzare Firebug.Può anche essere utile, dal momento che stai usando jQuery, il che significa che il tuo rapporto di profilazione sarà riempito con funzioni anonime e simili, rendendolo abbastanza illeggibile, John Resig's jQuery profiling plugin, che ti darà un risultato più chiaro sulla questione.

+0

Grazie mille, proverò il rilevatore di perdite di memoria per IE. PS, il collegamento in Ajaxian non funziona più, ecco il link di lavoro: http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector_v2.aspx – Eli

+1

Il link di John Resig allo script non è più lavori. – drewish

+0

L'ipotesi potrebbe non essere valida. Alcune pagine rimarranno aperte per un lungo periodo, ad esempio GMail o Facebook, e il codice JavaScript con perdite di memoria in esse verrà visualizzato rapidamente. – MauganRa

0

Firebug o Page Speed ​​di Google per Firefox dispongono di strumenti di profilazione.

10

Utilizzare Firebug. Per quotare da http://getfirebug.com/js.html:

Per utilizzare il profiler, basta andare alla scheda Console e fare clic sul pulsante "Profilo". Quindi usa la tua app per un po 'o ricarica la pagina e poi fai nuovamente clic sul pulsante "Profilo". Vedrai quindi un rapporto dettagliato che mostra quali funzioni sono state chiamate e quanto tempo ciascuna ha preso.

4

vorrei suggerire di dare un'occhiata al profiler in Firebug, e il plugin Drip per IE per aiutare a cercare per le perdite di memoria.

Inoltre, è sufficiente tenere presente che la maggior parte delle perdite di memoria javascript provengono da riferimenti circolari tra oggetti DOM e oggetti javascript non interrotti quando l'oggetto DOM viene scaricato. Per evitare ciò, suggerirei di evitare di creare riferimenti a oggetti javascript nelle proprietà dell'oggetto DOM (ad esempio, evitare qualcosa come document.getElementById('foo').bar = myObject;). Se devi creare questi riferimenti circolari, assicurati di romperli da soli in una funzione che viene eseguita quando la pagina viene scaricata o quando rimuovi gli oggetti DOM prima di scaricarli.

1

Un altro modo semplice per testare una parte di codice specifica è aggiungere un timer attorno ad esso.

var testStart = new Date(); 

// code to be tested here 

$('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds"); 

Dove jstest è un elemento arco da qualche parte visibile sulla tua pagina.

2

Google Chrome ha anche opzioni del profilo

1

opzioni Anche se Chrome ha profiling integrato che non fornisce informazioni precise sulla object.So preferisco usando lo strumento leak-finder-for-javascript che mi ha aiutato nel mio codice.

https://code.google.com/p/leak-finder-for-javascript/

Spero che questo aiuta.

+0

Sei in ritardo per rispondere a questa domanda, ma grazie per link interessanti –

Problemi correlati