Internet Explorer 7/Backbone可能存在内存泄漏问题?

3
我一直在试用Backbone框架,看它是否是从现在开始和未来构建我们应用程序的好选择。其中一个要求是我们必须支持Internet Explorer 7+,另一个要求是每页至少显示200个项目。
为了测试这个框架,我构建了一个非常简单的列表,在所有主流浏览器中都可以无缝运行,除了Internet Explorer 7。似乎存在一些内存泄漏问题,因为每次我重置数据时,总渲染时间都会增加。
我设置了一些测试场景:
有事件声明:http://jsfiddle.net/mefraimsson/a2YMF/ 没有事件声明:http://jsfiddle.net/mefraimsson/u6byQ/ 我想到的一个想法是,当元素被添加到DOM中或从DOM中移除时,声明的事件永远不会被清除。当我运行“没有事件声明”的测试场景并频繁点击“重新加载数据”时,渲染时间相当稳定,但是运行“有事件声明”的测试场景时,渲染时间迅速增加,IE7使用的内存量也增加了。这就是我认为存在某种内存泄漏的原因。
以下是一些问题:
- 有没有人有使用Backbone渲染如此大量数据的经验? - 有没有人在使用Backbone时遇到过内存泄漏问题? - 当使用Backbone处理如此大量的数据时,您是否建议采用另一种方法?使用一个视图并在模板中迭代数据可能是一种可行的解决方案,但这样做感觉不会充分利用Backbone。 - 您认为这与事件声明有关还是与Backbone的实现有关?
谢谢!
1个回答

8
内存泄漏是Javascript应用程序中常见的问题。我认为有一些框架试图为您处理此问题,但backbone没有。您使用的浏览器确实会影响如何注意到这些泄漏以及它们引起的问题,但在其他浏览器中它们仍然存在。通常不是浏览器的问题,而是通过回调函数处理Javascript中的事件绑定的方式。
我写了一篇文章,讨论了这个问题,并提出了一种处理方法,特别是针对视图:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ 请务必阅读评论。里面有一些其他处理内存泄漏的好建议。

我基本上已经以类似的方式处理了视图的删除,但是你提到的文章非常棒!非常感谢。现在我遇到了更多问题,并最终删除了我的“高级”选择器,即从"click td:first-child input[type=checkbox]": "check", "click td:first-child": "checkSelect", "click td:gt(0)": "select","click": "select"这似乎解决了IE7中的内存泄漏问题。 - marefr
我在想是否有一个标准的约定来处理这个问题,你的技巧看起来很干净(我没有考虑到视图直接触发事件...)。谢谢。 - Tristan Juricek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接