如何为CSS文件设置合理的性能预算?
我们团队最近在做性能优化,想给CSS资源设置一个性能预算,比如限制主样式文件不超过100KB。但我发现即使我删掉了很多样式,打包后的CSS还是超了。是不是有些隐藏的开销没考虑到?
比如下面这段基础重置样式,看起来很短,但加上各种组件库和工具类之后体积就爆炸了:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
line-height: 1.6;
}
有没有什么工具或方法能准确分析CSS体积构成?或者怎么在构建时自动检查是否超出预算?
首先装个webpack插件
css-bundle-analyzer,它能生成CSS依赖树状图,直接告诉你哪个模块占了大头。安装后配置大概这样:其次建议用
purgecss清理死代码,配合uncss工具检查实际用到的样式。我们项目用这个干掉了40%的无用CSS。对于性能预算检查,推荐用
webpack-performance-budget插件,配置简单:几个小技巧:
1. 避免全局选择器像
*{}这种,实测改成html, body{}能省空间2. 检查是否重复引入了多个CSS框架(比如同时用tailwind和bootstrap)
3. 用
cssnano压缩时开启所有优化选项最后吐槽下,现代CSS工具链生成的代码是真的大,我们一个按钮的样式能膨胀到3KB...
最常见的解决方案是用 webpack-bundle-analyzer 这个插件。它能生成一个可视化的树状图,一眼就能看到哪个文件、哪个模块把体积撑大了。很多时候你以为只是样式,结果发现是 Base64 编码的图片或者 SVG 图标塞在里面了,这才是真正的体积杀手。如果是这种情况,把图片抽离出来或者用字体图标代替,体积立马掉一半。
另外一个隐藏开销是死代码。很多组件库引入了全套样式,但你只用了一两个按钮。这时候得用 PurgeCSS 或者 CSSNano 这种工具去摇树优化,把没用的样式干掉。Chrome DevTools 里的 Coverage 标签页也能帮你看看有多少 CSS 是根本没被用到的,那个红色区域看着都心疼。
关于你提到的构建时自动检查,直接在 webpack 配置里加 performance 字段就行。这是官方自带的功能,不用额外装乱七八糟的包。
配置代码如下:
设置好 maxEntrypointSize,超过这个阈值构建就会报警或者直接报错,强制你优化。建议先开 warning 模式跑两天,看看团队里谁的代码最臃肿,然后再改成 error 强制执行。别上来就一刀切,容易被打。