J'ai une page Web qui utilise jquery pour recevoir des informations sur les produits lorsque les gens regardent les choses et affiche ensuite les dernières images de produits qui ont été vues. Ceci est un rappel jquery AJAX qui ressemble beaucoup à ceci:Javascript + tags IMG = fuite de mémoire. Y a-t-il une meilleure manière de faire cela?
if(number_of_things_seen > 10) {
$('#shots li:last-child').remove();
}
$('<li><img src="' + p.ProductImageSmall + '"></li>').prependTo('#shots');
Cependant, il semble fuir un peu de mémoire. Visuellement, il fait la bonne chose, mais l'empreinte croît indéfiniment.
L'inspecteur DOM de Safari montre que le DOM est ce que j'attendrais, mais il semble maintenir des références à chaque image qu'il a affichée (comme vu dans this screenshot au cas où quelqu'un serait intéressé).
J'ai ajouté
$('#shots li:last-child img').remove();
à la déclaration de retrait sans effet notable.
Y a-t-il un peu de magie nécessaire pour que le navigateur lance une partie de ce genre de choses?
Avez-vous réussi à trouver la fuite? Je serais intéressé si vous l'avez fait. – Tomalak
Non. Il fuit toujours comme un fou. J'ai fait une version différente de l'application qui a un mécanisme d'affichage considérablement différent, mais je vois toujours les images couler. – Dustin
Lorsque vous écrivez un scénario de test, dites une seule balise img et une boucle JavaScript qui remplace son attribut src d'un tas d'URL (pas de structure JS, juste un grand tableau statique d'URL et une boucle à trois lignes) - est-ce encore fuite? Si oui, vous n'avez pas de chance, sinon tout peut être réparé. – Tomalak