2013-07-21 17 views
6

C'è un modo per testare le unità per perdite di memoria javascript? Quello che voglio dire è, c'è un modo per accedere all'heap direttamente dal codice javascript per verificare la presenza di alberi DOM distaccati o un maggiore utilizzo della memoria?Test delle unità javascript per una perdita di memoria

So che puoi farlo da Chrome Dev Tools, ma mi chiedo se c'è un modo per farlo direttamente dai miei test di unità, dal momento che sembra noioso scrivere un po 'di codice, fare uno snapshot, eseguire un potenziale operazione di perdita di memoria, prendere un'altra istantanea dell'heap e ripetere per ogni singola operazione di perdita di memoria, ogni volta che si scrive un altro snippet di codice. Per non parlare del fatto che l'aggiunta di codice in un posto può causare una perdita di memoria imprevista in un'altra parte dell'applicazione.

È solo che ho scritto un'applicazione che presentava un'enorme perdita di memoria e ho dovuto ricominciare da capo. Quando svilupperò l'applicazione questa volta, voglio assicurarmi che i miei test unitari possano rilevare che ho appena creato una perdita di memoria e che posso eliminarla il prima possibile.

Penso di aver visto strumenti come questo per C++, ma non per Javascript. Qualcuno ne sa qualcosa? Grazie!

+0

Strumenti per sviluppatori di Chrome -> Profili. – elclanrs

risposta

-2

Per controllare le perdite di memoria, è necessario avere accesso alle dimensioni di allocazione della memoria o alla dimensione delle variabili. Non c'è possibilità di farlo in JavaScript.

1

In base a MDN's docs on window.performance, Google Chrome ha un'estensione non standard (window.performance.memory) che consente l'accesso a valori come usedJSHeapSize, totalJSHeapSize, jsHeapSizeLimit.

Per ottenere la precisione a livello di byte, è necessario utilizzare il flag --enable-precise-memory-info.

Per Garbage Collection, l'unico modo per forzare un browser a eseguire GC è con Chromium, con un flag di comando speciale. Quando si esegue questo comando:

chromium-browser --js-flags='--expose_gc' 

si ottiene l'accesso al metodo window.gc(), che è possibile chiamare per forza GC.

Ciò potrebbe aprire la possibilità di testare l'utilizzo della memoria nei test di unità, ad esempio.