我有一个包含很多行(例如 10.000)的表格。
(注意:我意识到拥有那么大的表格没有意义,但我想了解以下行为)。
当我收到新数据时,我想先清除行。奇怪的是,清空表格比从头开始构建行花费的时间要长得多。使用 html("")
或纯 JS innerHTML = ""
清除表格行需要 1.5 分钟,比自己构建行要多得多,后者只需不到一秒。
所以我的问题是:
- 为什么删除元素比添加元素花费更多时间? “幕后”发生了什么?
(请注意我的问题是为什么,我不是在寻找可能的解决方法)。
更新:
我注意到表格行和单元格应用了 float 定义,当我删除 float 时,表格立即被清空。
我仍然很想了解为什么 float 会使行的删除速度如此之慢。
这里有一个 fiddle :https://jsfiddle.net/maaikeb/t5pduuue/
在 Chrome 中,清空表格需要 25 秒,而将其附加到 DOM 只需 23 ms。
*我阅读了以下帖子,但他们更多地讨论了可能的解决方案,而不是关于为什么删除元素比添加元素花费更多时间,以及删除它们时实际发生的情况
jQuery empty is very slow
jQuery empty is very slow
What is the best way to remove a table row with jQuery?
Deleting table rows in javascript
jquery - fastest way to remove all rows from a very large table
最佳答案
我假设你在 IE 上的表现不佳。
我会说那是因为 $.empty
方法在循环中为表中每个删除的元素调用 removeChild
并且该方法在 IE 中总是表现不佳 -见this article for short case study以及一些性能比较和解决方案。
无论您对大型 DOM 做什么,您都会在 IE 上的性能很差。 This article on appendChild in large DOM on IE是社区如何仍然被这个简单的事实所迷惑的一个例子。 :)
关于javascript - 为什么删除元素比添加元素花费更多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46149924/