Javascript 角度';美元? 总结

Javascript 角度';美元? 总结,javascript,jquery,angularjs,memory-management,memory-leaks,Javascript,Jquery,Angularjs,Memory Management,Memory Leaks,为什么每次$compile运行时,下面的plunkr都会导致内存泄漏 对守则的解释 我正在编写一个指令,它有时需要完全重新呈现它的HTML。它以字符串的形式生成模板,然后将该字符串提供给$compile,最后使用jQuery删除旧DOM并用新呈现的元素替换它 每次执行此操作时,应用程序都会泄漏数兆字节的内存,经常导致浏览器崩溃。Chrome堆快照显示每次添加分离的DOM元素的树,但是由于某种原因,Plunkr没有这个问题(尽管它仍然泄漏很多) 我做错了什么导致了内存泄漏 “什么?生成字符串模板

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

对守则的解释 我正在编写一个指令,它有时需要完全重新呈现它的HTML。它以字符串的形式生成模板,然后将该字符串提供给$compile,最后使用jQuery删除旧DOM并用新呈现的元素替换它

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

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

“什么?生成字符串模板并重新编译?为什么?” 我知道,这显然不是编写角度指令的方式。我的第一种方法是将ng重复与其他双向绑定相结合。不幸的是,随着作用域上$watch语句数量的增加,这会导致性能问题。关于我为什么选择这种方法的原因,我在这里给出了一点小小的解释:

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

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

问题出在哪里?您没有破坏范围或解除事件绑定吗?是和是;这是两个问题。在我的“真实”代码中,一个第三方指令(bootstrap ui中的工具提示)中也存在内存泄漏,该指令没有释放对dom元素的引用,并且在作用域被销毁时也没有删除jQuery事件侦听器。但是这个特定的错误从来都不是plunk的一部分(不过我花了一段时间才找到它)。请关闭这个问题,或者更好地回答它,解释导致泄漏的原因以及如何准确修复,然后接受答案。因此,执行以下操作有助于HtmleElement.remove();htmlElement=null?childScope.on(“$destroy”,函数(){htmlElement.off();