我试图找出当一个元素被创建时,回流或重绘到底是什么时候被触发的.
这样做的上下文是试图了解如果元素直到函数结束才被附加到DOM树中的现有项,是否需要DocumentFragment.下面是一个例子:
HTML:
<body>
<div id=target> </div>
</body>
JS:
const ul = document.CreateElement("ul")
for (let i=0; i<100000; i++) {
let li = document.CreateElement("li")
let li_text = document.CreateTextNode("Node #: " + i)
li.appendChild(li_text)
ul.appendChild(li)
}
document.getElementById("target").appendChild(ul)
在本例中,是否每次在循环中创建<;li>;时都会触发回流?或者在将<;ul&>追加到<;div id=目标>;后仅触发一次回流?
如果是前者,防止这种多重重排的适当方法是:(1)创建文档片段,(2)将<;ul&>子项附加到该片段,(3)获取该<;ul&>子项并将其附加到它,然后(4)将该片段附加到<;div&>?
如果是后者...那么在这样的上下文中使用文档片段有什么好处呢?
语境
我的项目涉及动态创建许多列表--我正在进行性能优化,不确定如何监视或测试这种行为.通常我在Firefox上测试,Apache托管在本地目录中.