He estado trabajando en un sitio que se escribió usando Prototype pero lo vamos a pasar a jQuery. Se realizan muchas actualizaciones de página a través de Ajax.Updater de Prototype. Sin embargo, a veces los elementos que Prototype elimina y reemplaza tienen un widget jQuery ejecutándose en ellos, por lo que $ .cache tiene referencias a los elementos adicionales creados por el widget. Dado que jQuery no está realizando la eliminación de DOM, no tiene la posibilidad de borrar los datos de $ .cache para esos elementos cuando se eliminan, y termino con una pérdida de memoria. ¿Hay alguna manera de decirle a jQuery que compruebe que es $ .cache y descarte los datos de los elementos que ya no están en el DOM?Utiliza jQuery .data() en un elemento y luego elimina el elemento a través de la memoria de fuga directa de manipulación DOM
5
A
Respuesta
3
suena un poco difícil - sobre todo desde Ajax.Updater es una especialización de la que hace Ajax.Request no tienen una devolución de llamada onSuccess/onComplete, lo que significa que es probable que tenga que hacer una comprobación periódica de la caché, entre otra cosas. Eso suena a más trabajo que crear un 'actualizador' de jQuery.
Si está dispuesto a reemplazar el actualizador con una reescritura jQuery, este problema desaparece por completo, y es ciertamente más simple que solucionarlo. Sigue 'updater' simple en 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);
Cuestiones relacionadas
- 1. jQuery objeto y elemento DOM
- 2. Convertir elemento de jQuery para un elemento DOM regulares
- 3. ¿Cómo puedo convertir un elemento DOM en un elemento jQuery?
- 4. ehcache no elimina Elemento de la memoria sobre el desalojo
- 5. JQuery eliminar elemento DOM después de desvanecer
- 6. ¿Cómo prevenir la fuga de un evento a través de un elemento superpuesto en IE?
- 7. ¿Cómo agrego un elemento DOM con jQuery?
- 8. elemento de filtro basado en .data()/valor
- 9. jQuery mueve el elemento DOM dentro del elemento primario
- 10. cómo conseguir un elemento DOM de un selector de jQuery
- 11. jQuery patrones de fuga de memoria y causas
- 12. elemento de jQuery obtener DOM como cadena
- 13. Extendiendo un elemento DOM con jQuery
- 14. Cómo destruir un elemento DOM con jQuery?
- 15. jQuery detectar mousedown dentro de un elemento y luego mouseup fuera del elemento
- 16. Si elimina un elemento DOM, ¿los eventos que comenzaron con ese elemento continúan burbujeando?
- 17. notificación de angularJS cuando se elimina un elemento
- 18. jQuery: añadir elemento DOM si no existe
- 19. elemento DOM DOM eliminar
- 20. Reproducir y pausar un elemento de audio HTML5 a la vez a través de jQuery
- 21. Asociar datos a un elemento DOM para jQuery
- 22. XHTML DOM manipulación con jQuery
- 23. Obtener ID de dom-elemento
- 24. Como eliminar el elemento dom
- 25. Retire el elemento DOM partir de una variable con jQuery
- 26. ¿removeChild realmente elimina el elemento?
- 27. PHP DOM elemento de reemplazo con un nuevo elemento
- 28. ¿Por qué desaparecen los eventos registrados cuando se elimina un elemento de DOM?
- 29. Fuga de memoria con solicitudes AJAX + jQuery
- 30. jQuery: arrastrable conéctate a ordenable. el elemento arrastrable tiene un DOM diferente de la lista ordenable
Dado que ya está ejecutando una versión personalizada de Prototipo, para empezar, me acaba de actualizar el prototipo Object.remove y funciones Object.update a usar jQuery para eliminar elementos de jQuery, si está presente, lo que garantiza la limpieza de datos. No quería escribir un actualizador de jQuery porque el Ajax.Updater de Prototype se usa en muchos lugares de nuestro código para reemplazarlo y probarlo completamente en un tiempo razonable. –