15

我们使用 KnockoutJS 构建复杂的企业应用程序并面临性能不佳的问题,尤其是在 IE8 中。应用程序可能会占用超过 1GB 的 RAM,并且永远不会释放内存。在调查过程中,我们发现 KnockoutJS 保留对 DOM 节点的引用并且从不删除它。这可以使用 IESieve 对任何公共 KnockoutJS 示例进行重现,只需在玩添加和删除 DOM 节点的示例时观察 DOM 利用率。

有没有人遇到过这个问题并且对如何解决这个问题有任何想法?

4

2 回答 2

2

我们在 IE 8 上遇到过类似的淘汰 JS 问题。其中一个问题是拥有一个可观察数组(包含 500 多个元素)并使用所有这些构建一个 UI(想象一个类似表格或类似列表的结构)。唯一对我们有用的解决方法是更改​​视图模型,使其只包含很少的项目可以放在屏幕上。此外,我们必须为滚动事件添加处理程序,以便可观察数组不断刷新。而且(不要为此感到太自豪),我们必须在显示的记录顶部添加一个空 div 以产生视图滚动的错觉。

于 2012-11-27T07:36:23.130 回答
1

可能与删除 DOM 元素时未释放事件绑定有关。如果这是在淘汰赛的幕后发生的事情,您将不得不修补并提交拉取请求。

我在backbonejs上也经常发生这种事情。JavascriptMVC 更适合自己清理。

于 2012-11-27T07:33:14.580 回答