CSS优化、提高性能的方法有哪些?
CSS 优化主要是四个方面
-
1、加载性能
- 这个方面相关的 best practice 太多了,网上随便找一找就是一堆资料,比如不要用 import 啊,压缩啊等等,主要是从减少文件体积、减少阻塞加载、提高并发方面入手的,
- 任何 hint 都逃不出这几个大方向。
-
2、选择器性能
- selector 的对整体性能的影响可以忽略不计了,selector 的考察更多是规范化和可维护性、健壮性方面,很少有人在实际工作当中会把选择器性能作为重点关注对象的,
- 但也像 GitHub 这个分享里面说的一样——知道总比不知道好。
-
3、渲染性能
- 渲染性能是 CSS 优化最重要的关注对象。页面渲染 junky 过多?看看是不是大量使用了 text-shadow?是不是开了字体抗锯齿?CSS 动画怎么实现的?
- 合理利用 GPU 加速了吗?什么你用了 Flexible Box Model?有没有测试换个 layout 策略对 render performance 的影响?
- 这个方面搜索一下 CSS render performance 或者 CSS animation performance 也会有一堆一堆的资料可供参考。
-
4、可维护性、健壮性
- 命名合理吗?结构层次设计是否足够健壮?对样式进行抽象复用了吗?优雅的 CSS 不仅仅会影响后期的维护成本,也会对加载性能等方面产生影响。
- 这方面可以多找一些 OOCSS(不是说就要用 OOCSS,而是说多了解一下)等等不同 CSS Strategy 的信息,取长补短。
-
修复解析错误
-
避免使用多类选择符
-
IE6以及更古老的浏览器对类似.foo.bar的多类选择符解析不正确,参考IE6下的多类选择符一文。
-
移除空的css规则
-
这个规则不包含任何属性,类似:.foo { }空规则的产生原因一般来说是为了预留样式。去除这些空规则无疑能减少css文档体积。
-
正确使用display的属性
-
由于display的作用,某些样式组合会无效,徒增样式体积的同时也影响解析性能。CSS Lint会检查一下几点:
-
display:inline后不应该再使用width、height、margin、padding以及float。
-
display:inline-block后不应该再使用float。
-
display:block后不应该再使用vertical-align。
-
display:table-*后不应该再使用margin或者float。
-
不滥用浮动
-
虽然浮动不可避免,但不可否认很多css bug是由于浮动而引起。CSS Lint一旦检测出样式文件中有超过10次的浮动便会提示警告。
-
不滥用web字体
-
对于中文网站来说Web Fonts可能很陌生,国外却很流行。web fonts通常体积庞大,而且一些浏览器在下载web fonts时会阻塞页面渲染损伤性能。
-
不声明过多的font-size
-
这是设计层面的问题,设计精良的页面不会有过多的font-size声明。
-
不在选择符中使用ID标识符
-
主要考虑到样式重用性以及与页面的耦合性。
-
不给h1~h6元素定义过多的样式
-
全站统一定义一遍heading元素即可,若需额外定制样式,可使用其他选择符作为代替。
-
不重复定义h1~h6元素
-
值为0时不需要任何单位
-
标准化各种浏览器前缀
-
通常将浏览器前缀置于前面,将标准样式属性置于最后,类似:
-
.foo {-moz-border-radius: 5px;border-radius: 5px; }
-
使用CSS渐变等高级特性,需指定所有浏览器的前缀
-
避免让选择符看起来像正则表达式
-
CSS3添加了一些类似~=等复杂属性,也不是所有浏览器都支持,需谨慎使用。
-
遵守盒模型规则
更多面试题
如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。
面试题 | ||
---|---|---|
HTML | CSS | JavaScript |
jQuery | Vue.js | React |
算法 | HTTP | Babel |
BootStrap | Electron | Gulp |
Node.js | 前端经验相关 | 前端综合 |
Webpack | 微信小程序 | - |
这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!