我得到了一个我的老人工作的项目,这个项目是开发的,记住整个页面永远不应该重新加载。所以显然一切都进入了ajax。它有100条线就是这样的。
function iCreateProblems()
{
//some rubbish
document.getElementById('some_rubbish').innerHTML=obj1.responseText;
}
,典型的回复文字为"<div onClick="handleMe()">some thing stupid</div>";
页面上有三个主要的div,一切都重复加载并重新加载到这些div中。现在据我所知,这显然会泄露内存泄漏,对吧?那么我该如何解决这个问题呢?以这种方式有大约8000行代码。有没有办法可以修复内存泄漏?有数百个像这样分配的处理程序。我现在该怎么办?
答案 0 :(得分:1)
不,不应该。你不直接在js中处理内存;垃圾收集器删除不需要的内容,如果覆盖内容,则无需在div的内容上明确删除。
答案 1 :(得分:1)
没有看到剩下的代码,就没办法说出来了。尽管人们在这里说的是,在JS中创建内存泄漏并且没有注意到它是非常容易的。 JS垃圾收集器通常工作的方式是标记“可达”的变量。当变量的“标记”被取消而不重新应用时,变量被认为是“无法访问的”(也就是说,任何程序员的功能或范围都完全无法访问它们)。删除标记后,它们最终会被垃圾收集器清理干净。
内存泄漏的一个人为设想的例子是:
(function() {
var xhr = $.get('http://google.com/');
$('a').click(function() {
console.log('hello');
});
})();
只要该元素存在于页面上,并且该事件侦听器绑定到该元素,变量xhr
将永远清除垃圾收集器。即使代码中的任何地方都没有使用xhr
,垃圾收集器也会拒绝清理它,因为事件监听器仍然可以“访问”它。
编辑:我还应该提一下,编写糟糕的JS引擎中的错误也可能导致内存泄漏。 (另请参阅:Internet Explorer)。大多数DOM库都解释了这一点,并确保避免这些问题,但它仍然可以发生。对于这些内存泄漏,您需要找到该特定引擎的解决方法。