如何最佳实践地进行DOM插入?
- 在循环中一次性插入大块的HTML还是逐个元素逐个插入更快?
- 插入的HTML内容对速度有影响吗,还是只取决于块的大小?
- 是插入整个表格比通过使用"table hack"只插入行更快吗?
如何最佳实践地进行DOM插入?
设置 innerHTML
通常比插入单独的节点更快。
另一个可能性是创建 DocumentFragment,它允许一次性插入所有节点。使用 DocumentFragment 的另一个优点是它们可以很容易地 克隆,这可以替代大量 innerHTML
的用例,并且由于不涉及解析,因此可能更快。
innerHTML 插入比 DOM 操作 1:1 稍快,当您需要实际插入多个节点和属性时,它会更加高效,但由于它本质上是一个伪 eval 语句,因此更容易出错和危险。
根据我的经验,JavaScript 速度如此之快,以至于除了最大的插入/迭代批处理外,innerHTML 的速度增益不足以证明其风险。
长话短说,您希望尽可能少地进行 DOM 操作,因此在创建要插入的层次结构时,一个提示是在内存中相互创建它们,然后在最后可能的时刻将最高元素插入到 DOM 中。这样可以使浏览器的渲染更新最少。当然,我们正在讨论毫秒级别的小数...
innerHTML
的速度要慢得多 - http://jsperf.com/empty-an-element/4 - vsync在许多情况下,innerHTML实际上比直接DOM操作更慢。可以查看jsperf上的基准测试
并没有“正确答案”,您需要找到适合特定用例的最有效方法。
tbody
元素;尽管使用innerHTML
可能更快。 - Christoph