0

0

通用选择器会影响性能吗_在大页面中如何合理使用

P粉602998670

P粉602998670

发布时间:2026-01-28 13:47:02

|

369人浏览过

|

来源于php中文网

原创

通用选择器 * 严重拖慢渲染性能,因需遍历所有 DOM 元素匹配,导致首屏延迟10–30ms;应改用精准标签重置、all: unset 或 box-sizing 优化,避免嵌套与低效组合。

通用选择器会影响性能吗_在大页面中如何合理使用

通用选择器 * 确实会拖慢渲染性能

浏览器解析 CSS 时,* 会匹配页面中所有节点,强制引擎对每个 DOM 元素都做一次样式匹配计算。在 DOM 节点数超 5000 的页面里,这个过程可能让首次渲染延迟 10–30ms,尤其在低端设备或旧版 Safari 中更明显。

它还会干扰 CSS 引擎的优化机制——比如 Chrome 的“快速拒绝”策略(跳过明显不匹配的选择器)对 * 完全失效,因为「所有元素都可能匹配」。

  • 避免写成 * { margin: 0; padding: 0; } 这类全局重置,改用更精准的标签组合(如 body, h1, p, ul, li, input, button { margin: 0; padding: 0; }
  • 不要嵌套使用:div * spandiv span 多出一个通配层级,匹配开销指数级上升
  • 构建工具(如 PostCSS)可配置 stylelint 规则 selector-no-universal 提前拦截

真正需要「通用重置」时,优先用 all: unset

all: unset 是现代替代方案:它把元素还原为无样式初始状态,且只作用于声明该规则的元素及其后代,不会触发全树遍历。兼容性上,Chrome 37+、Firefox 27+、Safari 9.1+ 均支持;IE 完全不支持,但 IE 场景下本就不该依赖复杂 CSS 重置。

注意它和 all: initial区别unset 对继承属性表现为继承,对非继承属性表现为 initial;而 all: initial 会让所有属性(包括 display)都回退到初始值,可能导致布局崩溃。

  • 安全写法:*, *::before, *::after { box-sizing: border-box; } 可保留(仅影响一个属性,且现代浏览器对此有专门优化)
  • 慎用 all: unset 在组件根节点——某些框架(如 Vue)的 v-html 内容可能意外被重置
  • 若需兼容 IE,仍可用 normalize.css 或手写精简版标签重置,而非 *

大页面中更值得警惕的是「低效组合选择器」

* 更常被忽略的性能陷阱,是深层嵌套 + 通用/属性选择器混用,例如:article div[role="button"] > *:nth-child(2n)。这类选择器迫使浏览器从右往左匹配时,先收集所有偶数子元素,再逐层向上验证父级条件,DOM 越深、越宽,代价越高。

  • 把能确定的标签名写出来:用 article footer button 替代 article footer > *
  • 避免在高频更新区域(如列表项、弹窗内容)使用 :hover + * 组合(例如 .list-item:hover * { opacity: 0.8; }
  • 用浏览器 DevTools 的「Rendering」面板开启「Paint flashing」,观察 hover 或滚动时是否大面积闪烁——那是样式重算/重排的信号

实际项目中,性能问题往往出在「看不见的地方」

很多人盯着关键路径的 JS 执行时间,却没检查 CSSOM 构建阶段。一个未压缩的 node_modules 样式包(比如某 UI 库的完整 CSS)可能悄悄注入几十条含 *[attr] 的规则,而你在自己的代码里根本没写过它们。

建议上线前跑一次 npm run build 后的最终 CSS 文件,用正则 /\*\s*{|\*\s*\+/g 搜索残留的通配符,并结合 CSS Usage 插件确认这些规则是否真被用到。

最麻烦的不是写错,而是团队协作中没人 review CSS 性能——它不像 JS 错误会直接报红,而是在用户滑动卡顿、动画掉帧时才暴露。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

833

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

744

2023.11.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5306

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号