CSS 变量自 Chrome 49 (March 3, 2016) 版本开始支持。
如果你还不了解 CSS 变量,推荐阅读 CSS 变量教程- 阮一峰的网络日志[1]
到如今,几乎所有的主流浏览器都已经支持了该特性。当然,IE11 肯定是不支持的。
使用 CSS 变量,可以很容易的实现网站主题换肤等功能。它的性能怎么样呢,因为涉及到计算,在页面上大量的使用,会不会增加页面的渲染时间呢?
我做了一个简单的 benchmark 测试,创建 5000 个 CSS 变量,来看看它究竟会不会减慢页面的渲染速度。
performance
工具分别测试文件 5 次git clone git@github.com:fedek6/css-variables-benchmark.git
cd css-variables-benchmark
yarn
yarn build
yarn start:compiled [number of random colors] [reuse factor]
根据以上命令,会生成一个 bundle
的文件夹,里面有两个文件:static
和 dynamic
分别代表使用 CSS Class 的版本和 CSS 变量的版本。
接着可以使用 http-server
这个包和 Chrome 的 performance
工具来对这两个文件进行测试。
使用 CSS 变量的 HTML 文件大小会更大,因为相比于使用静态 CSS 来说,会需要多生成一些 CSS 变量。
次数 | 加载 | 脚本执行 | 渲染 | 绘制 | 系统 | 空闲 | 总计 |
---|---|---|---|---|---|---|---|
1 | 33 | 4 | 329 | 17 | 110 | 4948 | 5441 |
2 | 31 | 3 | 317 | 12 | 113 | 4928 | 5404 |
3 | 28 | 3 | 351 | 19 | 117 | 4950 | 5468 |
4 | 29 | 4 | 314 | 14 | 117 | 4943 | 5421 |
5 | 31 | 4 | 332 | 18 | 112 | 4944 | 5441 |
次数 | 加载 | 脚本执行 | 渲染 | 绘制 | 系统 | 空闲 | 总计 |
---|---|---|---|---|---|---|---|
1 | 33 | 3 | 381 | 16 | 110 | 4906 | 5449 |
2 | 38 | 2 | 358 | 20 | 114 | 4962 | 5494 |
3 | 36 | 2 | 371 | 24 | 106 | 4978 | 5517 |
4 | 36 | 2 | 321 | 11 | 106 | 4934 | 5410 |
5 | 33 | 3 | 353 | 22 | 108 | 4977 | 5496 |
在 10000 个 HTML 节点上使用 5000 个 CSS 变量只比普通使用 CSS 慢 0.7% 。但是实验环境相比业务场景也显得比较简单。通过数据看来,仅仅通过使用 CSS 变量 , 并不会 显著降低 页面的 渲染速度。
但在某些场景下,可能还是得关注下性能问题,比如在 CSS 的 calc
函数中使用 CSS 变量或使用 JavaScript 频繁地更改 CSS 变量。
文章翻译自:原文链接[2] 测试源码:源码链接[3]
如果本文对你有帮助,点赞👍支持下我吧,你的「赞」是我创作的动力。
关于我,目前是字节跳动一线开发,工作四年半,工作中使用 React,业余时间开发喜欢 Vue。
参考资料
[1]
CSS 变量教程- 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2017/05/css-variables.html
[2]
原文链接: https://blog.okopress.dev/css-variables-performance-benchmark-2021-f56cd26ae9f5
[3]
源码链接: https://github.com/fedek6/css-variables-benchmark