MW.*_*MW. 16 javascript jquery memory-leaks memory-management angularjs
每次$ compile运行时,为什么以下plunkr会导致内存泄漏?
http://plnkr.co/edit/HhB4croPKuN5TP2NPqq6
我正在编写一个有时需要完全重新呈现其HTML的指令.它通过将其模板生成为字符串,然后将该字符串提供给$ compile,最后使用jQuery删除旧DOM并将其替换为新呈现的元素来实现.
每次执行此操作时,应用程序都会泄漏几兆字节的内存,通常会导致浏览器崩溃.Chrome堆快照显示每次都会添加一个分离的DOM元素树,但Plunkr由于某种原因没有这个问题(虽然它仍然泄漏了很多).
我做错了什么导致内存泄漏?
我知道,这显然不是Angular指令的编写方式.我的第一种方法是ng-repeats与其他双向绑定的组合.不幸的是,这会导致性能问题,因为范围上的$ watch-statements数量会增加.关于为什么我选择这种方法的一些推理,我在这里给出一个小咆哮:数据绑定如何在AngularJS中工作?
我一直在努力,它不再泄漏记忆.我将保留这个问题,以防其他人发现它作为重新编译DOM的非泄漏方法很有用.