2009-06-10 75 views
3

我正在开发一个可以动态创建多个表格行的站点。现在总的行数为187.创建行时一切正常,但在IE中,当我离开页面时,存在大量滞后。我不知道这是否与我在页面中进行繁重的DOM操作有关?构建动态内容的事件处理程序时,我不创建任何函数闭包,所以我不相信这个问题与内存泄漏有关。任何见解都非常感谢。在IE中缓慢卸载页面

+0

请问当你关闭选项卡的滞后也发生? – 2009-06-10 23:53:53

+0

没有它不是 – ForYourOwnGood 2009-06-11 02:04:00

回答

1

您是手动创建元素节点还是使用innerHTML?尽管我不确定,但我怀疑IE是否有自己的与HTML节点相关的内存泄漏。

我做了一个演示页面,通过jQuery将187行添加到表中。我相信jQuery.append()使用一个聪明的小技巧将一个字符串转换为一组节点。它会创建一个div并将该div的innerHTML设置为您的字符串,然后在最终删除创建的div之前,将该div的所有子节点克隆到您指定的节点中。

http://www.andrewpeace.com/stackoverflow/rows/rows.html

我没有得到在IE8任何滞后,但也许它会在你使用的版本滞后。如果你让我知道,我会喜欢它!也许我可以帮助更多。

和平

0

YUI(也可能是其他一些流行的JavaScript库)提供automatic listener cleanup,所以我强烈建议使用YUI或另一个库使用此功能,以尽量减少与IE浏览器的问题。但是,听起来您可能会遇到简单的缓慢而不是任何类型的内存泄漏问题;您将事件处理程序附加到一大堆元素。已知IE6的优化程度并不高,所以它可能只是永远需要清理一切。

apeace也有一个好点:innerHTML的可以给你带来麻烦,并为您设置DOM怪事。这听起来像JQuery有一个解决方案。

0

我同意porneL。附加一个事件处理程序到<表>,让冒泡工作的魔力。大多数框架为您提供了一种找到导致原始事件的元素(通常称为“目标”)的方式。

如果您在使用使用document.createElement(),你可以将它们添加到DOM片段赚很多元素。将片段追加到页面时,会附加连接到它的所有子节点。该操作比一次一个追加每个节点更快。约翰Resig的对DOM文档片段一个伟大的写了起来:http://ejohn.org/blog/dom-documentfragments/