DOM操作性能
DOM是树结构
- property: 修改对象属性,不会体现到html中(通过style改变节点的样式,不会加入html行内样式)
- attribute: 修改html属性,会改变html结构(setattribute,getattribute)
- 两者都有可能会引起DOM重新渲染
DOM操作非常昂贵,很耗费性能,要避免频繁的DOM操作
- 对DOM查询做缓存
- 将频繁的DOM操作改为一次性操作
//不做缓存
for(let i = 0; i < document.getElementsByTagName('p').length; i++) {
//每次循环都会计算length,频繁进行DOM操作
}
//缓存DOM查询结果
const length = document.getElementsByTagName('p').length
for(let i = 0; i < length; i++) {
}
const ListNode = document.getElementById('list')
for(let i = 0; i < 10; i++) {
const li = document.createElement('li')
li.innerHTML = `List item ${i}`
//每次都加去,很耗性能,一次性加入节省性能
ListNode.append(li)
}
创建一个文档片段,此时还没有插入到Dom中,要知道如何创建文档片段
const listNode = document.getElementById('list')
//创建一个文档片段,此时还没有插入到Dom中
const lis = document.createDocumentFragment()
for(let i = 0; i < 10; i++) {
const li = document.createElement('li')
li.innerHTML = `list item ${i}`
//每次都加去,很耗性能,一次性加入节省性能
lis.append(li)
}
listNode.append(lis)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了