2009-06-10 6 views
8

L'interface utilisateur d'une application sur laquelle je travaille a été récemment refaite avec Ext.js et j'ai remarqué que l'utilisation de la mémoire de IE semble très importante lors de son affichage. Y a-t-il des problèmes de mémoire connus avec Ext.js lors de l'utilisation d'Internet Explorer?Y at-il des problèmes de mémoire avec Ext.js

+0

Merci pour toutes vos réponses. Je vais les transmettre aux développeurs de l'interface utilisateur de mon équipe. –

Répondre

9

La première chose qui me saute aux yeux dans votre question, c'est que vous voyez cela dans IE. Mon équipe a récemment passé par le même problème (Extjs sur IE). Il s'avère Ext n'est pas le coupable, mais plutôt IE est probablement la cause.

Un rapide sur Google pour « fuite de mémoire de fermeture IE » vous trouverez beaucoup d'explications, mais l'essentiel de base est la suivante:

IE utilise deux moteurs distincts pour gérer les DOM et JavaScript. Lorsque JavaScript lance un appel pour créer un élément DOM, le moteur Javascript atteint l'autre pour le créer. Si vous attachez du JavaScript à un événement sur un élément DOM, un lien est créé depuis le côté DOM vers le côté JavaScript. Le problème réside dans le fait que chaque moteur a sa propre collecte des ordures et ne peut pas voir de l'autre côté de l'autre moteur. Donc, les références circulaires sont vraiment faciles à trouver qui peuvent manger de grandes quantités de mémoire très rapidement.

0

En ce qui me concerne, je n'ai pas entendu parler de fuites de mémoire notables dans ExtJS. Bien que je sois sûr qu'il y en a eu, ils sont généralement corrigés assez rapidement, et la communauté est si grande que la plupart des bugs sont connus. Assurez-vous que votre conception est basée sur des composants individuels que vous pouvez ajouter et retirer quand ils ne sont plus nécessaires car la plupart du temps, une page Web ExtJS ne sera chargée qu'une seule fois et les mem sont remplis avec les composants supplémentaires que vous fournissez il. Vous pouvez libérer des mem en utilisant Ext.destroy (this.el) une fois que vous avez fini d'utiliser un composant.

De même, assurez-vous d'utiliser Firebug pour traquer tout composant ou objet qui aurait dû être retiré.

1

Je pense qu'il est assez facile de créer des fuites de mémoire lors de la programmation avec ExtJS pour les programmeurs non expérimentés. Ce n'est pas un problème ExtJS sur lui-même. C'est le paradigme de programmation ExtJS qui permet aux programmeurs de commettre facilement de telles erreurs. D'après mon expérience, j'ai créé une fuite de mémoire lorsque j'ai essayé de faire un chat AJAX direct en utilisant ExtJS. Lorsque certains objets sont constamment créés dans les rappels AJAX (tels que les banques de données, les manipulations de grille), ces objets ne sont pas libérés et détruits. Il doit y avoir des techniques spéciales et très astucieuses utilisées pour éviter les fuites de mémoire avec ExtJS, et ce n'est pas seulement lié à AJAX ou aux callbacks. Dans l'ensemble, ExtJS est une excellente bibliothèque, mais elle doit être utilisée avec précaution.

+1

Il existe une propriété autoDestroy pour les magasins qui peuvent vous aider. – geographika

0

Découvrez le this thread in their forums qui couvre un grand nombre de fuites dans Ext 2.2 causées par des éléments orphelins. Il semble que Ext 2.2.1 a corrigé la plupart d'entre eux.

Le problème est toujours ouvert, btw. ;)

Questions connexes