JQuery Memory Leak IE6 et IE7
13 juillet 2010 par: Benoit BonnevilleLa 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.