为什么每次$ 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的非泄漏方法很有用。
答案 0 :(得分:3)
自己回答是为了确保它不会在“未答复”下出现。我一直在努力,它不再泄漏记忆。我将保留这个问题,以防其他人发现它作为重新编译DOM的非泄漏方法很有用。