22 novembre 2007

Firefox (et Flock) et la consommation mémoire

En réponse à un commentaire à mon blog dans un billet sans relation avec Flock...


je suis allé sur le site recommandé dans le commentaire de Rod sur le même post sur Tech Crunch, donc je rementionne le lien :
http://www.korben.info/enfin-un-truc-pour-eviter-la-surcharge-memoire-avec-firefox.html

Il y a un espagnol qui a fait un utilitaire simple et efficace pour ENFIN réduire la consommation mémoire de Firefox.

=> l'algorithme en C est même communiqué
=> seul truc qui refroidi il a ajouté un bout dans son code qui va sur son site pour suggerer une "donation' paypal.

Il suffirait qu'un développeur intègre l'économiseur de mémoire à Firefox pour faire disparaitre sa tare majeure

Ce n'est pas la première fois qu'on m'en parle et qu'on me demande si Flock ou Firefox allait intégrer cela. La réponse est non, et la raison est que cet "utilitaire" ne résout rien du tout. Enfin si, ça résout un problème : ça rassure les maniques du Gestionnaire de Tâches de Windows.

Pourquoi Firefox consomme tant de mémoire?

Chaque octet utilisé l'est pour l'une de ces deux raisons:
  • La mémoire utilisée légitimement. Tout programme a besoin de mémoire, mais ce qui cause la gourmandise de Firefox est surtout (1) la plateforme et (2) son cache. Firefox garde les images récemment visitées ainsi que le rendu des pages en cache pour un chargement plus rapide.
  • Les fameuses "fuites de mémoire": avoir des fuites de mémoire signifie que de l'espace mémoire non utilisé est anormalement gardé par le programme. En gros, à cause d'un bug dans le code, le programme pense que l'espace est toujours nécessaire à son fonctionnement alors que ce n'est pas le cas. Le problème inverse consiste à libérer à tort de la mémoire toujours utilisée, et ça conduit à un crash pur et simple.

Comment réduire l'utilisation mémoire de Firefox?

On peut agir sur la mémoire utilisée légitimement, par exemple en réduisant le cache mémoire dans les préférences. Firefox sera plus lent, parce qu'il devra à chaque fois charger son cache depuis le disque. On peut aussi désactiver le bfCache (back-forward cache), qui garde un rendu de la page en cache. Grâce au bfCache, quand vous cliquer sur le bouton "back", la page précédente s'affiche instantanément.

Comme vous le voyez, réduire l'utilisation mémoire a toujours un cout, en général en terme de performances. Soit vous voulez un logiciel rapide, soit un logiciel qui utilise peu de mémoire.

Parlons maintenant des fuites de mémoires. Quand on en trouve, on les corrige ! Que ce soit Mozilla ou Flock, on perd jamais une occasion de boucher une fuite. Quand on (Flock) en trouve, on soumet un patch à leur bugzilla et généralement ça finit dans trunk assez rapidement. Le problème, c'est qu'on ne peut corriger que ce qu'on trouve. Combien y a-t-il de fuites de mémoire dans Firefox ? Y en a-t-il plus que dans les autres logiciels ? Personne ne sait vraiment, puisque dès lors qu'une fuite est connue elle ne reste pas longtemps. Certains ont tendance à confondre "haute utilisation mémoire" et "fuites de mémoire", c'est par exemple ce qui s'est passé quand Mozilla a introduit le bfCache.

Mais alors... Ce logiciel espagnol?

Ce logiciel n'agit ni sur la mémoire utilisé légitimement, ni sur les fuites de mémoire. Il n'agit pas sur le comportement de Firefox mais sur le comportement de Windows !

Tout le code tourne autour d'une fonction Windows: EmptyWorkingSet. Cette fonction déplace les données du programme depuis la mémoire centrale vers le swap disque. C'est une fonction généralement utilisée quand un programme est réduit dans la barre de notification : l'utilisateur n'utilise plus le programme activement, donc le programme peut faire dodo et mettre ses données sur le disque au lieu de la mémoire centrale.

Ça ne libère pas la mémoire non utilisée. Windows est suffisamment intelligent pour savoir que la mémoire non utilisée, eh ben faut la libérer.

Résultat, si on fait ça sur un logiciel au milieu de l'utilisation, ça va être catastrophique pour les performances puisque le logiciel va devoir charger ses données depuis le disque dur (lent) au lieu de la mémoire centrale (rapide) !

En bref, je vous conseille de faire confiance à Windows pour la gestion de la mémoire, plutôt que d'utiliser ce logiciel qui le bombarde de commandes "met ça en swap"... À moins que vous n'aimiez la musique de votre disque dur qui tourne.


PS: en réponse à la deuxième question de citoyenlambda, la plupart des extensions Firefox marchent dans Flock. Par contre, celles qui posent des problèmes sont souvent les extensions liées aux bookmarks, à causes des grosses modifications qu'on a fait au système de bookmark de Firefox. Donc à essayer... Mais c'est pas sûr que ça marche.