javascript - 为什么删除元素比添加元素花费更多时间?

标签 javascript jquery html performance dom

我有一个包含很多行(例如 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/

相关文章:

Javascript/jQuery 按类名禁用按钮

Jquery - 自己的jquery ui堆栈函数

php - 如何从数据库创建选择选项?

javascript - 如何在文本框中传输传单标记纬度/经度

javascript - 快速查找字符串是否在数组中的方法

javascript - ExtJS:HTMLEditor 在 Accordion 重新展开时丢失内容

jquery 删除事件监听器无法正常工作

javascript - AJAX没有返回值

javascript - 使用 jasmine 模拟对服务器的调用

javascript - Office-JS API : Fetching filtered data from table