9
votes

La mémoire spécifique de Firefox augmente dans l'application Ajax Heavy

Je suis perplexe sur la raison pour laquelle la mémoire de ma application augmente beaucoup plus rapidement dans Firefox que les autres navigateurs.

Bastically, l'application utilise une quantité décente d'AJAX, l'action de base étant de charger de nouveaux ensembles de postes comportant un niveau moyen de HTML et d'une grande image. Le montant total des données AVG par post (pclus d'images chargées) est inférieur à 1 Mo, peut-être 900k. En utilisant jQuery 1.7.1.

Dans la mémoire chromée semble être stable, mais dans Firefox, chaque post-charge entraîne environ 20 Mo de nouvelle utilisation de la mémoire. Étant donné que de nombreux postes sont chargés, vous arrivez rapidement à plus de 1 Go et même de 1,4 Go en mémoire, et les choses se serrent rapidement à une halte.

creuser sur Firefox, j'ai essayé d'éliminer les fermetures et toutes les variables étrangères utilisant "Supprimer". Aucune amélioration importante. J'ai ensuite commencé à éliminer la fonctionnalité et il semblait que tout fait une contribution.

Suppression des info-bulles, une nouvelle recharge excessive de widgets FB (un widget de commentaire par courrier), j'ai fait une forte amélioration, jusqu'à 10 Mo de nouvelle mémoire par poteau.

Mais au-delà de cela, je ne peux pas devenir beaucoup plus bas! Fondamentalement, si je ne fais que charger les nouvelles images HTML + (à nouveau environ 900K) via $ .post () chaque message ajoute ~ 8 Mo de nouvelle mémoire, même si les nouvelles images ont "Afficher: Aucun". (également essayé de désactiver Firebug).

C'est ma première tentative de la gestion de la mémoire, mais cela ressemble à beaucoup de frais généraux, et impair depuis que je ne pense pas que la mémoire augmente vraiment comme celle-là en chrome. On dirait que je devrais avoir la mémoire augmente plus en ligne avec la quantité de données chargées, pas 10x! (ou aucun du tout comme Chrome serait gentil ...)

Est-ce vraiment raisonnable? Des idées sur où rechercher des problèmes ou ce que je peux faire pour minimiser davantage ce problème?

Merci!

mise à jour :

Comme Boris observé à peu près, l'augmentation de la mémoire est presque entièrement dû aux images (au moins 80%). Mais encore une fois, l'augmentation de la mémoire est beaucoup plus (10x) la taille des images chargées. Une autre chose que j'ai apprise à propos de: Mémoire - Si je ouvre simplement un nouvel onglet vide, la mémoire tombe rapidement et presque toute la mémoire associée à l'image ajoutée disparaît. Je suppose que c'est GC de frapper, et donc comme le devine Boris, il semble que ce soit probablement une question de GC?

Si tel est le cas, comment puis-je enquêter pourquoi il n'est pas déclenché naturellement uniquement à FF? Y a-t-il des moyens de le déclencher dans JS? Comme je l'ai mentionné, j'ai essayé de passer à travers et d'enlever des fermetures ...

Une autre pensée, pourrait être des événements de liaison (via JQuery) aux éléments d'image au lieu de DIVS être mauvais? Je pensais que JQuery traitait de tout ce genre de choses.


17 commentaires

Courez-vous Firebug à Firefox? Si oui, que se passe-t-il si vous le désactivez?


Comme je l'ai mentionné dans la question - j'ai essayé de désactiver Firebug. ça ne fait aucune différence.


C'est très étrange. Pouvez-vous créer un lien vers un site montrant le problème?


Essayez ici: matériau/products/547 . Vous pouvez utiliser le bouton suivant qui apparaît à droite ou à la touche fléchée droite pour faire défiler les messages. Les messages seront chargés lorsque vous voyez l'icône de chargement et sera extraite par lots de 5 maintenant. Vous pouvez les trouver dans "#posts_container" comme ".post". La fonction qui les charge est CHODPOST (). Faites-moi savoir si cela ne fonctionne pas!


OK, sur cette page, je vois la mémoire utilisée principalement par les images. Notez que les images sont décodées dans Firefox Même si Affichage: Aucun . Je vois aussi la mémoire chute immédiatement si je "minimiser l'utilisation de la mémoire" à propos de: mémoire. Cela ressemble donc au vrai problème est que le GC ne se déclenche jamais pour vous, non? Voyez-vous également une chute de mémoire si vous déclenchez un événement de minimisation de la mémoire à propos de: Mémoire?


Comment avez-vous trouvé que la mémoire est principalement liée à l'image? Le mieux que j'ai fait est de prendre des instantanés en tas, mais ils sont énormes et semblent très opaques. Ahhh ... ne savait pas à propos de: Mémoire. semble cool. Laisse-moi me regarder ça.


Je viens de regarder où: la mémoire placait la mémoire blâme ...


Bons commentaires. voir ma mise à jour. On dirait que GC n'est pas déclenché sur la page. Comment puis je faire ça?


Vous ne pouvez pas créer un

Articles qui pourrait vous intéresser :

Select2 ne s'affiche pas correctement dans le mode bootstrap
datetimepicker ne fonctionne pas avec bootstrap 4?
L'appel Ajax n'affiche pas de réponse en cas de succès
django admin - Comment ajouter du javascript à la fin d'un fichier