超过3层的嵌套会拖慢DOM构建和样式计算,尤其在低端设备上引发明显卡顿;应优先用等语义标签替代,结合CSS Grid/Flexbox布局,并通过Chrome DevTools检查node.depth值优化结构。

避免深度嵌套的 结构超过3层的 嵌套会拖慢DOM构建和样式计算,尤其在低端设备上明显卡顿。浏览器解析时需逐层匹配CSS选择器,嵌套越深,重排重绘成本越高。实操建议:
- 用
、、 等语义化标签替代无意义的 堆叠
- 检查现有结构:Chrome DevTools → Elements 面板右键节点 → “Show DOM properties”,观察
childElementCount 和层级深度
- 若必须嵌套(如栅格布局),优先用 CSS Grid 或 Flexbox 控制布局,而非靠多层
撑结构
给高频操作的元素加 id 而非 class
用 document.getElementById() 查找元素比 querySelector() 或 getElementsByClassName() 快一个数量级——前者是原生哈希查找,后两者需遍历DOM树。
常见错误现象:
- 轮播图切换、表单实时校验、滚动监听中反复用
document.querySelector('.item') 导致 FPS 下降
- 动态插入的节点未设
id,后续更新只能靠 querySelectorAll + 循环匹配
正确做法:
- 对需要JS频繁读写的元素(如
、状态容器 )直接赋予唯一 id
- 避免用
id 做样式钩子——CSS里仍用 class,JS操作只认 id
只预加载关键资源
不是所有资源都适合 preload。滥用会导致带宽抢占,反而延迟首屏渲染。它只适用于:当前页面立即需要、且浏览器尚未发现的资源(比如字体、关键CSS、首屏大图)。
使用场景与参数差异:
- 字体文件:
—— 必须加 crossorigin,否则字体加载失败
- 关键CSS:
—— 用 onload 回调防阻塞
- 不要对
![]()
用 preload:浏览器已通过HTML解析自动发起请求;应改用 loading="eager" 或懒加载控制
用 + srcset 替代单图 ![]()
单图方案强制所有设备下载同一尺寸资源,移动端浪费带宽,桌面端又可能模糊。现代方案需按视口宽度、设备像素比(dpr)分发适配图像。
性能影响明显:
- 4G网络下,一张未适配的1920px宽图可能达800KB;用
srcset 后首屏图可压缩到120KB以内
- Safari 对
![]()
支持稳定,但旧版 Firefox 对 的 media 查询响应有延迟,建议 fallback 到 src
简短示例:
<picture><source media="(max-width: 768px)" srcset="hero-sm.webp 1x, hero-sm@2x.webp 2x"><source type="image/webp" srcset="hero.webp 1x, hero@2x.webp 2x">
@@##@@
</source></source></picture>
注意 顺序:浏览器从上到下匹配,第一个满足条件的生效;src 是最终 fallback,必须保留。
真正卡顿的地方往往不在 JS 执行,而在 HTML 结构本身——比如一个被忽略的 嵌套,或一段没加 crossorigin 的字体 preload,会让整页加载节奏乱掉。这些点不报错,但会在 Lighthouse 的“Avoid enormous network payloads”或“Minimize main-thread work”里悄悄扣分。
超过3层的 实操建议: 用 常见错误现象: 正确做法: 不是所有资源都适合 使用场景与参数差异: 单图方案强制所有设备下载同一尺寸资源,移动端浪费带宽,桌面端又可能模糊。现代方案需按视口宽度、设备像素比(dpr)分发适配图像。 性能影响明显: 简短示例: 注意 真正卡顿的地方往往不在 JS 执行,而在 HTML 结构本身——比如一个被忽略的 、、 等语义化标签替代无意义的 childElementCount 和层级深度给高频操作的元素加
id 而非 class
document.getElementById() 查找元素比 querySelector() 或 getElementsByClassName() 快一个数量级——前者是原生哈希查找,后两者需遍历DOM树。
document.querySelector('.item') 导致 FPS 下降id,后续更新只能靠 querySelectorAll + 循环匹配、状态容器 id
id 做样式钩子——CSS里仍用 class,JS操作只认 id
只预加载关键资源preload。滥用会导致带宽抢占,反而延迟首屏渲染。它只适用于:当前页面立即需要、且浏览器尚未发现的资源(比如字体、关键CSS、首屏大图)。
—— 必须加 crossorigin,否则字体加载失败 —— 用 onload 回调防阻塞 用 preload:浏览器已通过HTML解析自动发起请求;应改用 loading="eager" 或懒加载控制用
+ srcset 替代单图
srcset 后首屏图可压缩到120KB以内 支持稳定,但旧版 Firefox 对 的 media 查询响应有延迟,建议 fallback 到 src
<picture><source media="(max-width: 768px)" srcset="hero-sm.webp 1x, hero-sm@2x.webp 2x"><source type="image/webp" srcset="hero.webp 1x, hero@2x.webp 2x">
@@##@@
</source></source></picture>
顺序:浏览器从上到下匹配,第一个满足条件的生效;src 是最终 fallback,必须保留。crossorigin 的字体 preload,会让整页加载节奏乱掉。这些点不报错,但会在 Lighthouse 的“Avoid enormous network payloads”或“Minimize main-thread work”里悄悄扣分。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











