我正在开发一个动态创建许多表行的站点。现在的总行数是187.创建行时一切正常,但是当我离开页面时,IE中存在大量滞后。我不知道这是否与我在页面中进行的繁重DOM操作有何关联?在构建动态内容的事件处理程序时,我没有创建任何函数闭包,所以我不相信这个问题与内存泄漏有关。非常感谢任何见解。
答案 0 :(得分:1)
您是手动创建元素节点还是使用innerHTML?虽然我不确定,但我怀疑IE有自己的与HTML节点相关的内存泄漏。
我创建了一个演示页面,通过jQuery将187行添加到表中。我相信jQuery.append()使用一个聪明的小技巧将字符串转换为一组节点。它创建一个div并将该div的innerHTML设置为您的字符串,然后将该div的所有子节点克隆到您指定的节点中,最后删除它创建的div。
http://www.andrewpeace.com/stackoverflow/rows/rows.html
我在IE8中没有任何延迟,但也许它会落后于你正在使用的版本。如果你让我知道,我会喜欢它!也许我可以帮助更多。
和平
答案 1 :(得分:0)
YUI(可能还有一些其他流行的javascript库)提供了automatic listener cleanup,所以我强烈建议使用YUI或其他具有此功能的库来最小化IE的问题。但是,听起来你可能正在经历明显的缓慢而不是任何类型的内存泄漏问题;您将事件处理程序附加到一大堆元素。众所周知,IE6的优化程度不高,因此可能需要永远清理所有内容。
apeace也有一个很好的观点:innerHTML会让你陷入困境并为你设置DOM怪异。听起来JQuery已经解决了这个问题。
答案 2 :(得分:0)
尝试利用event bubbling将所有事件处理程序替换为一个。
答案 3 :(得分:0)
我同意porneL。将一个事件处理程序附加到< table>让冒泡工作变得神奇。大多数框架为您提供了一种查找导致原始事件的元素的方法(通常称为“目标”)。
如果使用document.createElement()创建大量元素,则可以将它们添加到DOM片段中。将片段附加到页面时,它会附加附加到其上的所有子节点。此操作比一次一个地附加每个节点更快。 John Resig对DOM文档片段进行了很好的撰写:http://ejohn.org/blog/dom-documentfragments/