【发布时间】:2013-03-21 21:43:18
【问题描述】:
使用 DocumentFramgment 允许我们将 DOM 元素彼此附加,而不会导致 browser reflow(即使用离线 DOM 树)。很多像jQuery 这样的库都使用文档片段来提高性能。
文档片段可以具有复杂的结构。例如,假设它代表如下内容:
<div>
<span>
<a href='asd'>asd</a>
</span>
<span>
<a href='asd2'>asd2</a>
</span>
<div>
<div>
Hello World
</div>
</div>
</div>
或包含多个子的文档片段:
<h2>Title 1</h2>
<p>Lorem ipsum.</p>
<p>Lorem ipsum.</p>
<h2>Title 2</h2>
<p>Lorem ipsum.</p>
<p>Lorem ipsum.</p>
通常,当我们完成构建片段时,我们会将其附加到主 DOM 树。
当我们这样做时会发生多少次回流?是否取决于文档片段的直接子代数?
更新:
我收到了来自 Google Chrome 团队的 Addy Osmani 的回复:
只有一个 DOM 重排。 PS:我们更倾向于将回流称为布局,因为它基本上是在页面中触发布局/重绘的事件。
【问题讨论】:
-
我敢打赌第一个问题的答案是“一个”
-
This 可能会有所帮助。
-
@JanDvorak 我猜所有的浏览器都只会做一次重排,但这不是实现的责任吗(即在一般情况下无法验证)?
-
@dystroy 不错的猜测。你能证明它不是规范要求的吗?
标签: javascript html reflow documentfragment