Je suis perplexe sur la raison pour laquelle la mémoire de ma application augmente beaucoup plus rapidement dans Firefox que les autres navigateurs. P>
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. P>
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. p>
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. p>
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. P>
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). P>
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 ...) p>
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? p>
Merci! P>
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? p>
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 ... p>
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. p>
3 Réponses :
Si vous utilisez vraiment beaucoup d'Ajax, vous pouvez essayer de définir $ .ajax () option "cache" à false. Il faudrait que de grandes quantités de données, cependant, de faire un impact sur la mémoire du navigateur. P>
Pour des raisons de performance, vous voulez généralement faire le plus de manipulation possible dans la mémoire et écrire sur le DOM à quelques reprises que possible. P>
Cela pourrait être que la version de FF que vous utilisez n'est pas de récupérer la mémoire ainsi que d'autres navigateurs que vous comparez à. p>
Il ne me semble pas que des fermetures seraient le coupable. Cela ressemble plus à un vieux problème à savoir. P>
Si c'est vraiment un problème, vous pouvez essayer de détruire explicitement de gros objets lorsque vous savez qu'ils n'utilisent plus. P>
Pas nécessairement une réponse, mais avez-vous ces problèmes avec la dernière version de Firefox (13)? Il y a eu beaucoup de problèmes liés à la mémoire et aux performances avec cette version et Mozilla ont déclaré qu'ils travaillaient pour les réparer. P>
De plus, si vous avez beaucoup d'articles en charge sur la charge de la page et ne les affichez pas au départ, vous pouvez utiliser le plugin de Waypoints de JQuery pour charger de manière dynamique ces images. Il allait soulager beaucoup de poids que le navigateur se sent sur la charge de la page. P>
J'espère que tout cela a été utile. Voici quelques matériaux de lecture qui peuvent vous aider davantage: p>
http: //support.mozilla. org / fr-nous / kb / firefox-how-how-it-it-plus vite http://support.mozilla.org/en-us/kb/firefox-Utilise-too-much-memory-ram p>
J'ai vu le mien Hit 2GB de RAM
J'ai un widget dans mon quai qui déclenche cette commande qui est enregistrée dans un fichier: p> Réinitialisez FF et récupérez tous vos onglets. Besoin de faire ça la plupart des jours :)
Si ce n'était pas pour Firebug, je serais sur chrome maintenant p> p>
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 code>. 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
@Biziclop Le contenu non conçu ne peut pas être un lien à propos de: mémoire.
@Phil_ken_sebben Il n'y a pas de moyen fiable de le faire; Vous pouvez essayer de gérer un code JS qui alloue une bande d'objets à ordures ... J'ai déposé bugzilla.mozilla.org/show_bug.cgi?id=730177 et j'espère qu'il y aura des informations utiles là-bas ...
@Boris Zbarsky, gc de côté, est-ce que je peux faire quelque chose pour réduire la mémoire allouée à ces images? Comme je l'ai dit, c'est comme 10 fois la taille des images elles-mêmes. Je fais de l'échelle des images, et peut-être attacher des gestionnaires d'événements. Mais ne semble pas que cela devrait aboutir à tant de mémoire ...
@PHIL_KEN_SEBEN Les images doivent être décodées pour être peintes. Firefox a tendance à les décoder dès qu'ils sont dans le DOM. Une image décodée est non comprimée et utilise 4 octets (RGBA) par pixel, d'environ 10 fois que l'image comprimée est à peu près prévue. Donc, par exemple, la première image de la page que vous avez liée à IS 735X568, il en aurait besoin d'environ 1,6 Mo de RAM. L'original JPEG est de 115kb. Il y a du travail en cours pour déposer des images de décodage plus avec impatience, mais cela a tendance à provoquer un scintillement lorsque les utilisateurs veulent voir l'image que vous ne pouvez pas maintenant peindre immédiatement parce que vous l'avez laissé tomber.
J'ai lu un peu de temps que Firefox avait des problèmes de GC, en raison de la manière dont ils implémentent GC, et ils cherchent à le remplacer d'une manière différente de FF12?
Ce serait génial, puisqu'il s'agit juste de cicader par rapport aux autres navigateurs en ce moment. Et au mieux que je puisse dire, tout cela a à voir avec simplement avoir des images grandes chargées via Ajax.
(a) Par intérêts, est l'utilisation de la mémoire moins si la page a servi avec un nombre équivalent d'images déjà en place, plutôt que d'ajouter de manière dynamique? (b) Je ne peux pas dire que GC n'est pas à blâmer ici, mais il semble étrange de blâmer GC lorsque (comme c'est probable) JavaScript ne gère pas les images elles-mêmes, mais insère simplement les nœuds IMG et le moteur de navigateur sous-jacent lui-même attrape et Afficher les images.
Juste une pensée, je me souviens de lire il y a des âges, pour éviter les problèmes de mémoire, il peut être important d'insérer de nouveaux nœuds dans le DOM avant de définir leurs attributs / propriétés. (a) créer un nœud IMG; insérer dans dom; définir son SRC; (b) créer un nœud IMG; définir son SRC; insérer dans dom;. (b) Peut bien consommer plus de mémoire que (a).