2010-08-05 6 views
1

J'ai un diaporama ajax très basique sur mon site. Sur chaque défilement, les nouvelles images et le contenu de la réponse augmentent continuellement la quantité de mémoire utilisée par le navigateur.Comment libérer de la mémoire après une requête Ajax

J'ai fait mes recherches et j'ai essayé toutes les suggestions pour réinitialiser l'objet XHR à chaque nouvelle requête, mais cela ne sert strictement à rien.

Les diaporamas sont basiques mais peuvent contenir des centaines de diapositives. Je souhaite qu'un utilisateur puisse naviguer dans le diaporama indéfiniment sans planter son navigateur. Est-ce seulement possible?

Merci, Brian

+0

Quel type de mécanisme utilisez-vous pour charger les images? – timdev

+0

@timdev - la réponse ajax contient du html pur, que je place ensuite dans le DOM en utilisant .innerHTML – Brian

Répondre

5

L'augmentation de l'utilisation de la mémoire est normale. Après tout, vous chargez plus de données à chaque fois - le code HTML de votre réponse AJAX, ainsi que les images qui sont affichées. À moins que vous n'utilisiez le HTML généré par Adobe Pagemill, cela ne représente que quelques centaines d'octets de HTML/texte. Ce sont les images qui vont aspirer le plus d'espace. Tout est bourré dans le cache du navigateur. Puisque vous ne faites pas quelque chose de fantaisiste avec le DOM (construire des sous-arbres et autres joyeusetés) directement, juste en remplaçant un morceau de HTML de façon répétitive, le navigateur finira par faire un nettoyage et écraser quelques-uns des vieux/vieux données d'image de la mémoire/cache et récupérer une partie de cette mémoire. Maintenant, si vous faisiez des manipulations DOM très complexes et génériez beaucoup de nouveaux nœuds à la volée, et que vous fuyiez des nœuds ici et là, ALORS vous auriez un problème de mémoire, car ces nœuds qui fuient finiront par enterrer le navigateur. Mais il ne faut pas s'inquiéter de l'augmentation de l'utilisation de la mémoire en chargeant des images, c'est comme une session de navigation étendue normale, sauf que vous ne chargez que de nouvelles images.

+0

Incroyablement utile, merci. – Brian

0

Si son diaporama, vous ne sont montrant une image à la fois? Si vous n'en montrez qu'un seul à la fois et que vous ne vous débarrassez jamais du dernier que vous montrez, cela augmentera toujours la mémoire. Si vous supprimez les diapositives qui ne sont pas affichées, cela devrait aider.

+0

Actuellement je remplace simplement le contenu HTML via innerHTML, donc je ne suis pas sûr que cela compte comme le supprimer officiellement. Est-ce que supprimer formellement le noeud DOM avec javascript ferait ce que vous décrivez? – Brian

+0

Je ne pense pas que vous avez besoin de libérer l'objet XHR, il ne sera pas économiser beaucoup de mémoire. En fait, essayez d'utiliser le même dans tous les appels. Ce qui semble consommer de la mémoire ici est la quantité croissante de contenu que vous affichez pour chaque page. Vous devriez essayer de ne garder que 3 à la fois: t-1, t, t + 1. Remplacer l'ancien contenu par new via innerHTML devrait en théorie supprimer les anciennes ressources - assurez-vous de ne pas les stocker accidentellement dans une variable chaîne ou dans une autre référence. J'essaierais de placer l'échange de contenu dans une fonction avec une portée limitée, de sorte que chaque fois que la fonction est quittée, la mémoire sera libérée. – Cahit

Questions connexes