Mon premier pitch en D1A en Mars 1994
Mot de passe :
Accueil | 
Résultats du mot clé Javascript
13/07/2009
Fuite de mémoire Javascript avec IE et l'Update Panel

 

C'est typiquement le genre de problème que l'on sous estime dans un projet et qui vous revient comme un retour de batte en pleine figure.

Internet Explorer est mauvais en Javascript, même IE 8 ! J'aurai espéré que les efforts réalisés l'équipe d'Internet Explorer aient permis d'améliorer les fuites de mémoires Javascript du navigateur.

Certes, il faut suivre les bonnes pratiques lorsque l'on conçoit ces contrôles Ajax en disposant correctement ces objets, mais cela ne suffit pas lorsque vous utilisez un UpdatePanel.

Ce nouveau contôle permet de faire des choses magiques, de faire de l'Ajax sans en faire réellement et c'est tout le problème. Aujourd'hui, je déconseillerai l'utilisation de l'UpdatePanel pour obtenir un effet Ajax, sans rafraichissement de l'intégralité de la page.

D'une part, même si vous avez l'impression qu'une partie de la page est rafraichie, c'est l'ensemble de la page qui est postée coté serveur avec ces contrôles, valeurs et viewState ! Coté serveur, rien de plus light qu'un cycle COMPLET de l'INTEGRALITE de la page ! Rien de très optimisé.

Là où les problèmes arrivent c'est lorsque votre page se rafraichit 10, 20 fois au niveau de l'updatePanel et c'est le drame. La mémoire d'IE grandit, grossit au point de mettre en péril la fluidité de vos animations Javascript et de vos comportements clients.

Ce qui est le plus inquiétant, c'est que sous Firefox ou Chrome, pas de problèmes de fuite de mémoire coté client. Que faire alors ?

D'une part, je conseillerai déjà de supprimer les fuites de mémoire controlables grâce à quelques outils en désactivant déjà l'updatePanel durant votre période de débug. sIEve ou JavaScript Memory Leak Detector sont de bons outils qui peuvent déjà bien vous aider.

Pour comprendre les raisons des fuites, MSDN vous donnera également un bon coup de main.

Si vous persitez à utiliser des UpdatePanels, une solution peut être mise en oeuvre pour détruire le contenu de vos div qui servent d'UpdatePanels.

Continuer à utiliser les UpdatePanels risquent donc de nuire à votre avenir en ASP.Net. L'avenir des interface Web via ASP.NET peuvent s'en passer largement avec le Framework 4.0 et ne fait que confirmer ce que je pense des WinForms :

  • Le Rendu doit le plus possible être réalisé coté client
  • Limiter les postbacks, voit même les supprimer
  • Utiliser WCF pour communiquer avec le serveur avec de recevoir et envoyer des données
  • Ne pas négliger la partie sécurisation de ces échanges
  • Votre ViewState s'en portera bien mieux et sera bien plus léger.

Voici quelques ressources glanées sur la toile à ce sujet :

 

 

Mots clés associés : Microsoft Javascript IE  | Lien permanent | Laissez le premier votre commentaire
Publiée dans la zone Technologies
03/09/2008
innerHTML ou appendChild, et performances sous Google Chrome

Pour ajouter des éléments dans du HTML, il y a deux écoles. L'ancienne, à la rache, avec le innerHTML et la nouvelle, pro, proche de ce qu'on peut faire en c# avec le appendChild.

Andrew Hedges a fait un petit comparatif de performances en fonction du navigateur et il en ressort qu'il n'est pas possible de privilégier l'une ou l'autre solution !

La manipulation de div dans un éléments 10 000 fois donne des résultats assez disparates. J'en ai profité pour ajouter dans le tableau le résultat sans appel avec Google Chrome.

 

  innerHTML DOM replacement innerHTML + DOM
Google Chrome Beta

179

265

245

Safari 3

109

104

96

Safari 2

489

849

457

Firefox 3b4

1588

1030

523

Firefox 2

1386

1019

401

IE 8b1

900

2131

844

IE 7

290

1275

475

IE 6

339

1880

373

Opera 9.27

266

847

675

Mots clés associés : Google Chrome Javascript  | Lien permanent | Laissez le premier votre commentaire
Publiée dans la zone Technologies
Le profil Facebook de Laurent GEFFROY
Rechercher sur ce site

Accès aux Archives

 
fermer la fenetre