16

概括

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

http://plnkr.co/edit/HhB4croPKuN5TP2NPqq6

代码说明

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

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

我做错了什么导致此内存泄漏?

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

我知道,这显然不是 Angular 指令的编写方式。我的第一种方法是将 ng-repeats 与其他双向绑定相结合。不幸的是,随着范围内 $watch 语句数量的增加,这会导致性能问题。关于我为什么选择这种方法的一些原因,我在这里稍微吐槽一下:数据绑定在 AngularJS 中是如何工作的?

编辑

我一直在研究 plunk,它不再泄漏内存。我会保留这个问题,以防其他人发现它可用作重新编译 DOM 的不泄漏方法。

4

1 回答 1

3

自己回答以确保它不会出现在“未回答”下。我一直在研究 plunk,它不再泄漏内存。我会保留这个问题,以防其他人发现它可用作重新编译 DOM 的不泄漏方法。

于 2013-12-04T09:42:01.743 回答