JQuery Memory Leak IE6 et IE7

13 juillet 2010 par: Benoit Bonneville

La librarie javascript Jquery v 1.3.2 à des fuite de mémoire (memory leak) avec Internet Explorer. Cela entraine l’erreur « out of memory » d’internet explorer.
Les fonctions incriminés sont les suivantes :

Fonctions JQuery qui entrainent un leak

Les fonctions :

  • .html()
  • .replaceWith()
  • jQuery(code_html)

L’impact d’une fuite de mémoire

Tout dépend de votre site internet, si ce n’est qu’un site vitrine dont les pages changent souvent, avec des visites brèves, vous n’avez pas à vous soucier de ce problème.

Par contre si votre site web deviens complexe avec de nombreux appel ajax et que l’utilisateur reste longtemps sur la même page.
Par exemple Facebook, ou des outils de back-office.
Vous devez faire attention à ces fonctions, évitez au maximum de vous en servir.

Fonctions sans fuites

les sélécteurs, $() , .find()

Vous conservez donc une grande souplesse offerte par le framework

Solution

La solution la plus simple est de remplacer par un

element[0].innerHTML = 

lorsqu’il n’y a qu’un seul élément, et une petit boucle for si il y en a plusieurs.

Je n’ai testé que la version 1.3.2

Attention

Si votre memory leak persiste ou si vous voulez patcher jQuery,.. consultez : la doc Microsoft

Le cas le plus courrant est les « closures »
chaque capture d’évenement avec :

element.on*event*=function(){}

entraine un leak, l’objet element ne sera jamais collecté, même si vous le détruisez.

Filed under: Développement

Répondre