Angular的$ compile中的内存泄漏?

时间:2013-09-30 10:33:39

标签: javascript jquery angularjs memory-management memory-leaks

摘要

为什么每次$ compile运行时,以下plunkr都会导致内存泄漏?

http://plnkr.co/edit/HhB4croPKuN5TP2NPqq6

代码

的说明

我正在编写一个有时需要完全重新呈现HTML的指令。它通过将其模板生成为字符串,然后将该字符串提供给$ compile,最后使用jQuery删除旧DOM并将其替换为新呈现的元素来实现此目的。

每次执行此操作时,应用程序都会泄漏数兆字节的内存,通常会导致浏览器崩溃。 Chrome堆快照显示每次都会添加一个分离的DOM元素树,但由于某种原因,Plunkr没有这个问题(虽然它仍然有很多漏洞)。

导致内存泄漏的错误是什么?

“什么?生成一个字符串模板并重新编译它?为什么?”

我知道,这显然不是Angular指令的编写方式。我的第一种方法是ng-repeats与其他双向绑定的组合。不幸的是,这会导致性能问题,因为范围上的$ watch-statements数量会增加。关于我为什么选择这种方法的一些推理,我在这里给出一个小小的咆哮:How does data binding work in AngularJS?

修改

我一直在研究它,它不再泄漏记忆。我将保留这个问题,以防其他人发现它作为重新编译DOM的非泄漏方法很有用。

1 个答案:

答案 0 :(得分:3)

自己回答是为了确保它不会在“未答复”下出现。我一直在努力,它不再泄漏记忆。我将保留这个问题,以防其他人发现它作为重新编译DOM的非泄漏方法很有用。