8

我正在使用的应用程序的 UI 最近用 Ext.js 重做,我注意到 IE 的内存使用量在查看它时似乎非常大。使用 IE 时 Ext.js 是否存在已知的内存问题?

4

4 回答 4

9

在您的问题中,我首先想到的是您在 IE 中看到了这一点。我的团队最近遇到了同样的问题(IE 上的 Extjs)。事实证明,Ext 不是罪魁祸首,而是 IE 可能是原因。

快速谷歌“IE 关闭内存泄漏”会找到很多解释,但基本要点如下:

IE 使用两个独立的引擎来管理 DOM 和 JavaScript。当 JavaScript 调用创建 DOM 元素时,Javascript 引擎会到达另一个引擎来创建它。如果将 JavaScript 附加到 DOM 元素上的事件,则会创建一个从 DOM 端返回到 JavaScript 端的链接。

问题在于每个引擎都有自己的垃圾收集,并且无法看到另一个引擎。所以循环引用真的很容易遇到,可以很快吃掉大量的内存。

于 2009-06-10T23:22:42.110 回答
1

我认为对于没有经验的程序员使用 ExtJS 进行编程时很容易造成内存泄漏。这不是 ExtJS 本身的问题。它是 ExtJS 编程范式,它让程序员很容易犯这样的错误。

根据我的经验,当我尝试使用 ExtJS 进行简单的 AJAX 聊天时,我已经创建了内存泄漏。当在 AJAX 回调中不断创建一些对象(例如数据存储、网格操作)时,这些对象不会被释放和销毁。ExtJS 必须使用特殊且非常聪明的技术来避免内存泄漏,而且它不仅与 AJAX 或回调有关。

总而言之,ExtJS 是一个很棒的库,但必须小心使用。

于 2009-06-11T01:59:24.370 回答
0

就我而言,我还没有听说过 ExtJS 中有明显的内存泄漏。虽然我确信有一些,但它们通常会很快得到修复,而且社区是如此之大,以至于大多数错误都是已知的。

确保您的设计基于您可以在不再需要它们时添加和删除的各个组件,因为大多数时候,ExtJS 网页只会加载一次,并且 mem 会被您提供的其他组件填充。使用完组件后,您可以使用 Ext.destroy(this.el) 释放一些内存。

此外,请确保您使用 Firebug 来追踪任何应该被删除的组件或对象。

于 2009-06-10T21:39:55.190 回答
0

在他们的论坛中查看这个线程,它涵盖了 Ext 2.2 中由孤立元素引起的大量泄漏。似乎 Ext 2.2.1 修复了其中的大部分。

顺便说一句,问题仍然是开放的。;)

于 2009-06-16T18:29:02.923 回答