KnockoutJS内存泄漏

时间:2012-03-24 17:27:33

标签: memory-leaks knockout.js

我很确定我使用KO 2.0版进行了内存泄漏。我有一个可观察的数组,其中填充了AJAX调用的结果。此集合是数据绑定的,每个集合都有一个DIV容器。数组中的每个对象都有一个绑定到复选框的可观察值。我已经使用Chrome检查了堆,我的结论如下:

如果AJAX调用返回3个元素,则它们在DOM上正确呈现。如果我此时拍摄堆的快照,那里有三个SearchResult个对象。如果我再次触发AJAX调用并返回5个元素,则所有5个元素都正确呈现给DOM。但是,如果我在Chrome中拍摄堆的快照并对它们进行比较,则列出的8个元素仍在堆中,所有这些元素都被列为“已添加”而没有列为“已删除”。 DOM显示始终是正确的,但内存使用只是保持攀爬和攀爬,因为旧的搜索结果永远不会被释放。

任何人都可以帮助我或指导我诊断内存泄漏吗?

更新

我创建了一个jsFiddle来展示我正在做的事情的要点。我已经把一切都划分了但核心功能,我仍然可以在我的本地机器上运行时复制内存泄漏。显然代码不会发布,因为它需要命中我的本地服务器来运行搜索。

更新2

我推出了最新的2.1.0.0 Beta版本,泄漏消失了。我不是使用测试版的东西或经典的“只是升级到新版本”修复程序的忠实粉丝。我仍然非常有兴趣知道发生了什么改变或者我做错了什么造成了泄漏。

1 个答案:

答案 0 :(得分:10)

您没有做错任何事情,看起来ko.cleanNode忽略了foreach绑定,而没有在更新的observableArray中正确处理过时的对象。

https://github.com/SteveSanderson/knockout/issues/271

这已在2.1.0beta中修复