循环里频繁操作DOM真的会影响性能吗?
最近在做一个动态列表渲染的功能,发现页面有点卡。我是在for循环里直接用element.innerHTML += item不断拼接内容的,听说这样性能很差,但不太确定具体原因。
试过把HTML先拼成字符串再一次性赋值,确实快了不少,但想搞清楚为什么循环里操作DOM就这么慢?有没有更优雅的优化方式?
let list = document.getElementById('list');
for (let i = 0; i < items.length; i++) {
list.innerHTML += <li>${items[i]}</li>;
}
直接用 DocumentFragment 或者数组join:
DocumentFragment 是内存中的临时节点,append的时候不会触发重排,比你 innerHTML 赋值还快。