Ho lavorato su un sito che è stato scritto utilizzando Prototype ma lo stiamo spostando in jQuery. Molti aggiornamenti di pagina vengono eseguiti tramite Ajax.Updater di Prototype. Tuttavia, a volte gli elementi che Prototype rimuove e sostituisce hanno un widget jQuery eseguito su di essi, quindi $ .cache ha riferimenti agli elementi aggiuntivi creati dal widget. Dal momento che jQuery non sta facendo la rimozione del DOM, non ha la possibilità di cancellare i dati da $ .cache per quegli elementi quando vengono rimossi, e finisco con una perdita di memoria. C'è un modo per dire a jQuery di controllare che sia $ .cache e scartare qualsiasi dato per elementi che non sono più nel DOM?Utilizza jQuery .data() su un elemento e quindi rimuove l'elemento tramite la memoria di perdita diretta DOM manipolazione
5
A
risposta
3
suona un po 'difficile - soprattutto perché Ajax.Updater è una specializzazione di Ajax.Request che fa non hanno un callback onSuccess/onComplete, il che significa che probabilmente si dovrà fare un controllo periodico della cache, tra le altre cose. Sembra più un lavoro che creare un "programma di aggiornamento" di jQuery.
Se si desidera sostituire il programma di aggiornamento con una riscrittura jQuery, questo problema scompare completamente ed è sicuramente più semplice di lavorare attorno ad esso. Segue un semplice 'updater' in jQuery.
function update() {
$.ajax({
type: 'get',
url: 'theContent.html',
success: function(text) {
// .html calls '.cleanData()' internally. No need to do anything else.
$('#updateMe').html(text);
}
});
}
var i = setInterval(update, 5000);
Problemi correlati
- 1. perdita di memoria jQuery con rimozione DOM
- 2. Manipolazione DOM XHTML con jQuery
- 3. manipolazione DOM lato server jQuery
- 4. jQuery modelli di perdita di memoria e cause
- 5. La funzione jQuery remove rimuove davvero gli elementi Dom?
- 6. jQuery/Sizzle checkContext perdita di memoria
- 7. Perdita di memoria con richieste AJAX + jQuery
- 8. Perdita di memoria in jQuery Chiamate AJAX
- 9. jQuery rimuove i listener di eventi dal contenuto DOM distrutto?
- 10. Estensione di un elemento DOM con jQuery
- 11. DOM: perché si tratta di una perdita di memoria?
- 12. WriteableBitmap Perdita di memoria?
- 13. off-heap, heap nativo, memoria diretta e memoria nativa
- 14. problema di perdita di memoria nell'app Backbonejs
- 15. Prestazioni di manipolazione DOM IE
- 16. Come distruggere un elemento DOM con jQuery?
- 17. Facile manipolazione del DOM in AngularJS - fare clic su un pulsante, quindi impostare lo stato attivo a un elemento di input
- 18. Come posso convertire un elemento DOM in un elemento jQuery?
- 19. HTML5 trascinare la manipolazione DOM con javascript
- 20. perdita di memoria javascript
- 21. Perdita di memoria quando si utilizza Entity Framework
- 22. elemento Recupero con jQuery all'interno evento ad eliminazione diretta
- 23. Perdita di memoria quando si utilizza la libreria condivisa con archiviazione locale dei thread tramite ctypes in un programma python
- 24. Sposta la selezione dopo un elemento DOM
- 25. Forzare un aggiornamento DOM in Internet Explorer dopo la manipolazione di javascript dom
- 26. Convertire elemento jQuery per un normale elemento DOM
- 27. script node.js e possibile perdita di memoria
- 28. elemento filtro basato su .data()/valore
- 29. La rimozione di un elemento di script rimuove le sue funzioni dalla memoria?
- 30. WPF Perdita di memoria TextBlock quando si utilizza Font
Poiché stiamo già esegue una versione personalizzata di prototipo per cominciare, ho appena aggiornato il prototipo Object.remove e funzioni Object.update utilizzare jQuery per rimuovere elementi se jQuery è presente, garantendo così la pulizia dei dati. Non volevo scrivere un programma di aggiornamento di jQuery perché l'Ajax.Updater di Prototype è utilizzato in troppe parti del nostro codice per sostituirlo e testarlo completamente in un ragionevole lasso di tempo. –