我工作的应用程序的UI最近使用Ext.js重做,我注意到IE的内存使用量在查看时看起来非常大。使用IE时,Ext.js是否存在已知的内存问题?
答案 0 :(得分:9)
在你的问题中,第一件事就是你在IE中看到了这一点。我的团队最近经历了同样的问题(IE上的Extjs)。事实证明,Ext不是罪魁祸首,而是可能是IE的原因。
快速谷歌'IE封闭内存泄漏'会找到很多解释,但基本要点如下:
IE使用两个独立的引擎来管理DOM和JavaScript。当JavaScript调用创建DOM元素时,Javascript引擎会跨越另一个来创建它。如果将JavaScript附加到DOM元素上的事件,则会从DOM端创建一个链接到JavaScript端。问题在于每个引擎都有自己的垃圾收集,无法看到其他引擎。所以很容易遇到循环引用很快就会吃到大量内存。
答案 1 :(得分:1)
我认为使用ExtJS为没有经验的程序员编程时,很容易造成内存泄漏。这本身并不是ExtJS问题。这是ExtJS编程范例,它让程序员可以轻松犯这样的错误。
根据我的经验,当尝试使用ExtJS进行直接的AJAX聊天时,我创建了内存泄漏。当在AJAX回调(例如数据存储,网格操作)中不断创建某些对象时,不会释放和销毁这些对象。必须有一些特殊的,非常聪明的技术来避免使用ExtJS的内存泄漏,它不仅与AJAX或回调相关。
总而言之,ExtJS是一个很棒的库,但必须小心使用。
答案 2 :(得分:0)
就我而言,我没有听说ExtJS中存在明显的内存泄漏。虽然我确定已经有了一些,但它们通常会很快得到修复,而社区是如此之大,以至于大多数错误都是已知的。
确保您的设计基于您可以在不再需要时添加和删除的各个组件,因为大多数情况下,ExtJS网页只会加载一次,而mem会填充您提供的其他组件。完成组件使用后,可以使用Ext.destroy(this.el)释放一些内存。
此外,请确保使用Firebug来追踪应该删除的任何组件或对象。
答案 3 :(得分:0)
查看this thread in their forums,其中包含由孤立元素引起的Ext 2.2中的大量泄漏。似乎Ext 2.2.1修复了大部分内容。
问题仍然是开放,顺便说一句。 ;)