Fuite mémoire sous IE7, IE6 et précédents

Le but de cet article est d'expliquer le phénomène de fuite mémoire dans le navigateur Internet Explorer.

Les causes et conséquences

Jusqu'à la version 7, Internet Explorer possède 2 garbages collectors distincts:
- 1 pour le DOM.
- 1 pour le JavaScript.

Lors du changement de page, le navigateur essaie de libérer les objets de ces 2 garbages. Or, ces 2 garbages ne communiquent pas entre elles. Ainsi, quand le collecteur arrivent sur un élément du DOM qui possèdent un lien vers le JS, ce premier n'est pas libéré, et bien sûr, il se passe la même chose lorsque c'est le collecteur JS qui arrive sur un élément qui à un lien dans le DOM.

Cette mémoire non-libérée grossit, grossit..... jusqu'à considérablement ralentir le navigateur (et tout le système d'ailleurs), voir même le faire planter.

Les solutions

Il existe quelques petits softs qui vous aideront à dépister vos fuites pour ensuite coder convenablement votre JS. (car c'est bien de ce côté que tout va se faire)

Les outils

Voici quelques petits utilitaires qui vous permettront de trouver les liens qui n'ont pas été nettoyés correctement.
- DRIP. http://www.drip.com-about.com/
- SIEVE http://www.sieve.com-about.com/

Les bonnes pratiques

- Libérer les objets du DOM: Dans votre code JS, au moment du déchargement de la page (event: 'onUnload()'), il faut débrancher le JS du DOM.

Exemple simple: <body onUnload="document.getElementById('MonIdObjetDom').onclick=''";>

Exemple classique:

<head><script>unloadAll = function() {....}</script></head><body onUnload="unloadAll()">

- Lorsque vous utilisez des librairies JS (tel que prototype, jQuery, ext-js....) il y a fort à parier qu'une méthode de libération de mémoire soit implémenter ("destroy" ou "unBindAll" par exemple)
Mais méfiez-vous quand même des versions de vos librairies JS, certaines ont abandonné le support des vieux navigateurs (jQuery2 par exemple)

Le dernier conseil mais pas le plus facile à faire comprendre aux clients (surtout quand on parle de parc de centaines de PCs): mettre à jour vers IE8!

Conclusions

Les derniers navigateurs ont tous résolu ce problème et les cas de fuite mémoire sont voués à disparaître. Cependant beaucoup de nos clients actuels (je pense principalement au domaine public) ont encore une bonne vieille version de IE 6.5 d'installer sur leur machine et sont souvent dans l'incapacité de mettre à jour leur propre poste de travail.
Cher chefs de projets, n'oubliez pas ce paramètre dans vos chiffrages.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.