一次性插入多个节点,如何优化 DOM 操作的性能?

缓存DOM查询结果

//不缓存DOM查询结果
for(let i=0; i < document.getElementsByTagName('p').length; i++) {
//每次循环都会计算length,频繁进行DOM查询
}

//缓存DOM查询结果
const Plist = document.getElementsByTagName('p')
const length = pList.length
for(let i = 0; i<length; i++) {
//缓存length,只进行一次DOM查询
}

将频繁操作改为一次性操作

频繁操作

const list = document.getElementById('list')

for(let i =0; i <10; i++) {
    const li =document.createElement('li')
    li.innerHTML = `List item ${i}`
    list.appendChild(li)
}

一次性操作

const listNode = document.getElementById('list')

//创建一个文档片段,此时还没有插入到DOM树中
const frag = document.createDocumentFragment()

//执行插入
for(let x=0; x<10; x++) {
    const  li = document.createElement('li')
    li.innerHTML = 'List item'  + x
    //先插入文档片段中
    frag.appendChild(li)
}

//都完成之后,再插入到DOM树中
listNode.appendChild(fag)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值