为啥 removeChild 比 innerHTML = ' ' 快?

Posted

技术标签:

【中文标题】为啥 removeChild 比 innerHTML = \' \' 快?【英文标题】:Why removeChild faster than innerHTML = ' '?为什么 removeChild 比 innerHTML = ' ' 快? 【发布时间】:2020-10-19 04:25:29 【问题描述】:

我有两个函数从this answer 到另一个问题:

1.

const destroy = container => 
  document.getElementById(container).innerhtml = '';
;
const destroyFast = container => 
  const el = document.getElementById(container);
  while (el.firstChild) el.removeChild(el.firstChild);
;

为什么第二个函数比第一个函数快?

【问题讨论】:

您是否有某种实验结果表明第二个更快? @Sнаđошƒаӽ 不,我只是看着答案问 【参考方案1】:

根据经验,innerHtml 很慢,因为浏览器需要重新解析 html(即使它被设置为 '')。但是removeChild 直接修改了 DOM,不需要任何解析。因此removeChild 更快。

【讨论】:

以上是关于为啥 removeChild 比 innerHTML = ' ' 快?的主要内容,如果未能解决你的问题,请参考以下文章

删除节点removeChild()

为啥我的 .parentNode 返回未定义? [复制]

XmlNode.RemoveChild() 递归

删除节点(removeChild())

在 chrome 中使用 document.removeChild() 删除脚本

(转载)Javascript removeChild()不能删除全部子节点的解决办法