Aggiornamento 2015
Nel 2012 questo non era possibile, se si desiderava supportare tutti i principali browser in uso. Sfortunatamente, al momento questa è ancora una funzionalità unica di Chrome (un'estensione non standard di window.performance
).
window.performance.memory
Supporto browser: Chrome 6+
Risposta del 2012
C'è un modo per scoprire quanta memoria viene utilizzata da una pagina web o dalla mia applicazione jquery? Sto cercando una soluzione runtime (non solo strumenti per sviluppatori), in modo che la mia applicazione possa determinare le azioni in base all'utilizzo della memoria nel browser di un utente.
La risposta semplice ma corretta è no . Non tutti i browser ti espongono tali dati. E penso che dovresti abbandonare l'idea semplicemente perché la complessità e l'inesattezza di una soluzione "artigianale" può introdurre più problemi di quanti ne risolva.
Il conteggio degli elementi DOM o delle dimensioni del documento potrebbe essere una buona stima, ma potrebbe essere piuttosto impreciso poiché non includerebbe binding di eventi, data (), plug-in e altre strutture di dati in memoria.
Se vuoi davvero restare fedele alla tua idea, devi separare i contenuti fissi da quelli dinamici.
Il contenuto fisso non dipende dalle azioni dell'utente (memoria utilizzata da file di script, plug-in, ecc.)
Tutto il resto è considerato dinamico e dovrebbe essere l'obiettivo principale quando si determina il limite.
Ma non esiste un modo semplice per riassumerli. Potresti implementare un sistema di tracciamento che raccolga tutte queste informazioni. Tutte le operazioni dovrebbero chiamare i metodi di tracciamento appropriati. per esempio:
Avvolgere o sovrascrivere jQuery.data
il metodo di informare il monitoraggio del sistema sui tuoi allocazioni di dati.
Racchiudi le manipolazioni html in modo che venga tracciata anche l'aggiunta o la rimozione di contenuto ( innerHTML.length
è la stima migliore).
Se mantieni oggetti in memoria di grandi dimensioni, dovrebbero essere monitorati.
Per quanto riguarda il binding di eventi, dovresti usare la delega degli eventi e quindi potrebbe anche essere considerato un fattore in qualche modo fisso.
Un altro aspetto che rende difficile stimare correttamente i requisiti di memoria è che browser diversi possono allocare la memoria in modo diverso (per oggetti Javascript ed elementi DOM).