我正在开发一个大量使用 Javascript 并包含大量 DOM 操作的项目。随着代码的增长,我注意到有时在Internet Explorer (9) 下页面加载时 Javasript 执行会有延迟(大约 1-2 秒)。这种延迟从未在 Firefox 上发生过。
例如:
// the actual code contains much more stuff
$("body").append("<p>paragraph</p>");
尽管它p
是动态生成的,但它应该在现代浏览器上的页面加载后立即看到。但在 IE 上,有时我可以清楚地看到在所有静态内容加载p
后被添加,这使得整个页面跳跃。
如果我重新启动 IE,延迟就消失了。但是,如果已经完成了大量的 DOM 操作,它会在下一页刷新时再次发生。
所以我在想这是否是memory leak
由于我很少取消对象引用引起的。
var foo = $("#foo");
foo.on("click", function() {
var bar = '<div id="bar">bar</div>';
$("body").append(bar);
// nullify bar
bar = null;
});
// nullify foo
foo = null;
问题:
我应该像上面的例子一样在使用完每个对象引用后取消它们吗?
如果 Q1 的答案是否定的,我应该在什么时候或在什么情况下使对象引用无效?
除了无效之外,我还能做些什么来防止内存泄漏?
PS:几年前我读过一些类似的问题,它们主要针对 IE 6/7。