La mia domanda presuppone che si stia creando una pagina Web che verrà visualizzata per "molto tempo". Sono curioso di sapere quali sono alcuni dei comuni trucchi che causeranno perdite di memoria quando si utilizza JQuery/JavaScript in uno scenario del genere? Ad esempio, cosa succede in termini di memoria quando chiami $.remove()
su una raccolta di elementi? Grazie!Quali sono alcuni metodi comuni per causare perdite di memoria utilizzando JQuery/JavaScript?
risposta
JavaScript utilizza la raccolta dei rifiuti per recuperare la memoria occupata da corde, oggetti, array e funzioni che non sono più in uso. Questo ti libera, da parte del programmatore, di dover esplicitamente deallocare la memoria di ed è una parte importante di ciò che rende la programmazione di JavaScript più semplice della programmazione C, ad esempio.
Riferimenti:Check this for more e an answer on SO.
problemi di memoria in caso si registrano meccanismo MDN
var i;
var els = document.getElementsByTagName('*');
// Case 1
for(i=0 ; i<els.length ; i++){
els[i].addEventListener("click", function(e){/*do something*/}, false});
}
// Case 2
function processEvent(e){
/*do something*/
}
for(i=0 ; i<els.length ; i++){
els[i].addEventListener("click", processEvent, false});
}
Nel primo caso, una nuova funzione (anonimo) viene creata ad ogni ciclo turno. Nel secondo caso, la stessa funzione dichiarata in precedenza viene utilizzata come gestore di eventi. Ciò si traduce in un minore consumo di memoria. Inoltre, nel primo caso, poiché non viene mantenuto alcun riferimento alle funzioni anonime, non è possibile chiamare element.removeEventListener perché non abbiamo un riferimento al gestore, mentre nel secondo caso è possibile eseguire
myElement.removeEventListener("click", processEvent, false)
- 1. Perché le perdite di memoria sono comuni?
- 2. Questo codice potrebbe causare perdite di memoria?
- 3. Quali sono alcuni comuni algoritmi di messa a fuoco?
- 4. Quali sono alcuni pattern di gioco 3D comuni?
- 5. Come posso evitare di causare perdite di memoria in Firefox?
- 6. Un listener ViewTreeObserver non rimosso può causare perdite di memoria?
- 7. Quali sono alcuni buoni metodi di debug Perl?
- 8. Interfacce, metodi anonimi e perdite di memoria
- 9. Quali sono gli usi comuni di UDP?
- 10. Come evitare perdite di memoria?
- 11. Cosa può causare perdite nella sezione?
- 12. Perdite di memoria Python
- 13. con jmx possono causare perdite di thread?
- 14. Utilizzando moq per deridere solo alcuni metodi
- 15. Quali sono alcuni buoni metodi per sostituire i nomi di stringa con hash di interi
- 16. Quali sono alcuni buoni metodi per trovare la "parentela" di due corpi di testo?
- 17. Quali sono alcuni usi intelligenti di LINQ?
- 18. Quali sono alcuni buoni tutorial di Wireshark?
- 19. Quali sono alcuni dei migliori strumenti di rilevamento della memoria Javascript?
- 20. Quali sono alcuni script di shell interessanti?
- 21. Perdite di memoria che sono ancora presenti in WPF 4
- 22. Quali sono alcuni esempi di interfacce Go?
- 23. perdite di memoria Node.js?
- 24. Utilizzo di Jconsole per perdite di memoria
- 25. Quali algoritmi comuni sono usati per C's rand()?
- 26. Perdite di memoria tramite socket.io
- 27. jQuery.data può causare una perdita di memoria?
- 28. Quali sono alcuni casi d'uso per le strutture di tupla?
- 29. Quali sono alcuni suggerimenti per il debug di Objective-c?
- 30. Quali sono alcuni usi validi per spEL (Spring Expression Language)?
Entrambi i casi fanno schifo btw, stai registrando un evento su ogni elemento quando è possibile utilizzare il bubbling degli eventi. –