Internet
17/03/2008 11:50

Mozilla : la consommation mémoire de Firefox expliquée


L’un des développeurs de Firefox vient de poster un billet très intéressant sur son blog, afin d’expliquer les domaines dans lesquels les artisans du navigateur de Mozilla ont travaillé pour la prochaine mouture. Relativement long et technique, le billet dresse également un point de comparaison entre la consommation de la récente bêta 4 de Firefox 3 et celles de Firefox 2.0.0.12 et Internet Explorer 7.


La mémoire vive, un vrai champ de bataille

Il est clair que la consommation des ressources a toujours été un problème important souligné à de très nombreuses reprises par les utilisateurs de Firefox. Plusieurs onglets ouverts, et certains voyaient grimper la consommation de mémoire vive jusqu’à plusieurs centaines de mégaoctets, un phénomène qui ne faisait qu’augmenter selon le temps d'ouverture du navigateur, surtout sur les mêmes pages.

En fait, si le problème était général, il était surtout divisé en plusieurs rubriques, chacune ayant ses raisons techniques. Ainsi, l’un de ces problèmes est l’allocation de mémoire vive, ou plus exactement les demandes d’allocations faites par le navigateur. C’est tout le code source de Firefox qui a été repris ou presque, pour décompter le nombre total d’allocations demandées. Et ce chiffre était de plus de 60 000 dans Firefox 2, et est désormais inférieur à 40 000, soit une réduction d’un bon tiers. Le travail continue sur la fragmentation de la mémoire, mais une grosse partie des objectifs est déjà atteinte.

La gestion des cycles

Un autre grand souci présent dans les versions précédentes de Firefox est la gestion des cycles. Un cycle est décrit comme une relation entre deux ou plusieurs éléments se faisant référence l’un l’autre. Tant que cette relation continue, chaque élément reste en « vie », ne se dégageant ainsi pas de la mémoire.

Ces cycles se créent en toutes occasions et sont difficiles à repérer. En fait, c’est au développement de l’application elle-même que le code permet ou pas la présence de cycles, et c’est donc une question de vigilance, ce qui pose un autre problème. Il faut savoir en effet que Firefox doit une grande partie de son succès à l’écosystème des extensions du navigateur. Or, ces extensions ont le droit d’accéder à n’importe quelle partie de la mécanique interne de leur hôte, et peuvent donc ainsi introduire une grande quantité de cycles, compliquant la tâche des développeurs.

De Firefox 1.5 à la version 2.0, les cycles découverts ont été brisés et corrigés manuellement, avec un code spécifique pour chacun. Une solution certes, mais une solution rébarbative et quelque peu chronophage. Un collecteur automatique de cycles a dont été mis en place dans Firefox 3 pour repérer les cas concernés et les briser de manière récurrente. On peut comparer la mission de ce nouveau composant au rôle essentiel d’un éboueur qui fait sa tournée régulière pour collecter les déchets.

Des caches gloutons

Les caches de Firefox sont un élément essentiel pour la rapidité et la fluidité de la navigation. Ce sont ces fameuses zones dans lesquelles sont entreposées des informations relatives aux pages que vous avez visitées. Les caches permettent ainsi de charger des pages déjà vues beaucoup plus rapidement, quitte à parfois remettre en place des éléments « périmés ». On connaît bien sûr le cache des adresses web, mais il y a également celui du code des pages ou encore celui des images.

En fait, il faut distinguer les différents types de caches, car tous ont un point de chute sur le disque dur, mais tous ont également leur propre consommation de mémoire vive. L’une des explications à la consommation croissante de la mémoire avec Firefox 2 est que le cache augmente sans cesse, sans limite de temps, pour prévoir votre retour sur des sites que vous avez visités, même si ces visites datent de plusieurs heures.

Avec Firefox 3, les caches ne peuvent plus stocker de l’information à l’infini. Bien qu’ils permettent le très agréable effet d’instantané lorsque l’on utilise les boutons précédent/suivant, ils supprimeront désormais automatiquement les informations relatives à des pages visitées plus de 30 minutes auparavant. La demi-heure joue donc le rôle de frontière temporelle au-delà de laquelle les données sont effacées du cache.

Le stockage des images : de 100 Ko sur un site à plusieurs Mo en mémoire

Ces problèmes de cache comptent très probablement parmi les plus importants et sérieux de Firefox, en particulier dans la gestion des images. Ces dernières sont le plus souvent présentes dans des formats compressés sur les pages web. Les formats GIF, JPEG ou encore PNG sont les plus courants, mais Firefox doit les décompresser pour les utiliser en mémoire.

Dans Firefox 2, les images décompressées sont stockées dans le cache mémoire pendant des heures, y compris sur des pages présentes dans des onglets qui n’ont pas été consultés eux aussi depuis un bon moment. Et une image d’à peine 100 Ko peut occuper plusieurs mégaoctets en mémoire, ce qui conduit le navigateur à demander une dose gargantuesque de mémoire vive. Dans Firefox 3, non seulement les informations des images décompressées sont jetées à la poubelle au bout de 30 minutes, mais les onglets qui ne sont pas spécifiquement ouverts et actifs ne chargent plus les images en mémoire.

Les fuites de mémoire, un problème récurrent

Enfin, l’un des domaines qui a demandé le plus de travail aux développeurs est la chasse aux fuites de mémoire. Symptôme d’une de ces fuites : la consommation en mémoire vive de Firefox augmente sans cesse, sans raison apparente et de manière plus ou moins chaotique. Dans les grandes lignes, il s’agit d’une action effectuée au sein du logiciel et qui demande une certaine quantité de mémoire, à la différence qu’elle se répète en boucle et de manière infinie. Certaines fuites sont plus importantes que d’autres, le principal facteur étant justement la quantité de mémoire affectée à l’action initiale.

Depuis le début du développement de Firefox 3, plus de 400 de ces fuites ont été colmatées, et certaines étaient franchement ennuyeuses. Elles ne sont pas toutes régulières dans la mesure où elles surviennent souvent sur des sites particuliers avec un contexte spécifique. Mais dans des cas comme Gmail, la situation devient vite ennuyeuse puisque c’est l’exemple type d’un site qui reste ouvert longtemps dans un onglet, permettant à la fuite de continuer son travail de sape tranquillement.

De bons résultats pour le moment

Au final, la consommation de mémoire vive de Firefox a été attaquée et réduite sur plusieurs fronts. Des mesures réalisées par Stuart Parmenter, ingénieur chez Mozilla, indique ainsi qu’au terme des tests effectués, Firefox 3 termine la course avec une consommation 60 % inférieure à celle de Firefox 2. Avec moins de 100 Mo de mémoire vive utilisée, il est également loin d’Internet Explorer 7 qui finit avec presque 500 Mo. Des mesures qu’il va bien sûr falloir contrôler, mais il est clair que la récente bêta 4 de Firefox 3 affiche un mieux certain vis-à-vis de ses prédécesseurs, surtout la version 2.0. Une bêta 5 sera bientôt disponible, et gageons qu’elle devrait encore amener son lot d’améliorations. Tous les travaux sont réalisés dans le cadre du développement de la version 1.9 du moteur Gecko. Firefox 4 sera basé sur Gecko 2.0, et la différence devrait être notable dans bien des domaines (projet Mozilla 2.0).

yahoo.com


Lu 1958 fois



Dans la même rubrique :