CSS优化、提高性能的方法有哪些?

🌙
手机阅读
本文目录结构
axihe

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添加了一些类似~=等复杂属性,也不是所有浏览器都支持,需谨慎使用。 

  • 遵守盒模型规则

更多面试题

如果你想了解更多的前端面试题,请点击下面进行选择,这里基本包涵了市场上的所有前端方面的面试题,让你面试更加顺利。

这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!


AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili 和抖音。

关注我: Github / 知乎

如果你加我的私人微信,麻烦写上您的 称呼,所在地区,职业,方便我备注,谢谢


本站的微信公众号

阿西河前端教程

Anbang

安邦的私人微信

微信号: yaolushan

Anbang

Bilibili(B站)

朱安邦

Anbang