CSS性能优化的方式有哪些?

简介: 前言网站性能很大程度上会影响一个用户的留存,通常来说,一个性能很好、加载速度快的网站能够留住更多的用户。如果一个网站加载时长超过5s甚至更长时间,那么用户很可能会直接推出网站,这种等待及其影响用户体验。因此提升网站的性能、加载速度是非常重要的,今天我们就从CSS的角度去进行网站的性能优化。

1. 精简样式文件


很多时候我们会把很多个页面的样式文件合并为一个,因为通常页面之间会有公共的样式文件,但是这样做有好处也有坏处:


坏处:

  • 样式文件偏大,影响加载速度
  • 浏览器会进行多余的样式匹配,影响渲染时间。


好处:

  • 样式文件会被浏览器缓存,进入到其他页面样式文件不用再去下载。

很多人认为样式文件越少越好,因为浏览器会对样式文件进行缓存,所以便一味的进行合并,但是我们也需要懂得取舍,正确的做法是:

  • 如果是大项目,应该合并成不同的样式文件,如果是简单的项目,建议合并成一个文件即可。如果无法确认项目规模,建议分开成不同的样式文件,日后要合并也比较方便。


2. 利用继承减少代码量


我们都知道CSS有一些属性是可以继承的,比如color,font-size,font-family等等,但是很多开发人员不注意这种细节,编写很多重复性代码,从而使得CSS文件变得比较大,影响加载速度。


3. 内联首屏关键CSS


网站性能是留住用户的关键,那么网站首屏的加载速度更是关键的关键。


通常我们不会去写内联样式,因为这会造成代码维护困难,而且内联样式浏览器不会缓存的,每次刷新都会重新加载css。


但是,凡事都有两面性,内联CSS能够使页面渲染的开始时间提前,因为在HTML下载完成之后就能渲染了,不像link那样引用样式需要耗费更多时间。


那么,我们是否可以全部使用内联样式呢?答案是否定的,刚刚说了内联样式还是存在许多问题的,所以最好的解决办法就是:首屏关键CSS可以使用内联的形式。


4. 异步加载CSS


CSS会阻塞渲染,在CSS文件请求、下载、解析完成之前,浏览器将不会渲染任何已处理的内容。


但是,有些CSS文件可能不是我们渲染必须的CSS文件,我们可以让它异步加载,从而提升渲染速度,比如下面两种异步加载CSS的方式:


  1. 使用JavaScript动态创建样式表link元素,并插入到DOM中
    // 创建link标签 const myCSS = document.createElement( "link" ); myCSS.rel = "stylesheet"; myCSS.href = "mystyles.css"; // 插入到header的最后位置 document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling );

2. 修改link标签(有兼容性问题)

<link rel="preload" href="mystyles.css" as="style" onload="this.rel='stylesheet'">

或者

<link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'">


5. 压缩文件


浏览器想要渲染出网页必须要先将CSS等文件下载下来,所有文件越小,那么就能够更快的下载和渲染,特别是在一些网络速度比较慢的场景下效果尤为明显。


我们可以借助一些打包工具进行压缩,比如webpack、gulp/grunt、rollup等。


6. 正确使用选择器


尽管现阶段各大浏览器对选择器的优化已经很好了,差别不大,但是我们还是可以尽量按照一定的规则来进行使用,比如以下几点:

  • 不要嵌套过多复杂的选择器
  • 通配符选择器尽量少用
  • 不要为了速度而放弃了可维护性和可读性


7. 慎用一些CSS属性


如果某些CSS属性需要浏览器计算,那都是需要耗费一些性能的,比如如box-shadow、border-radius、filter、透明度、:nth-child等等。


如果非必要情况下可以不必使用这些属性,当然,大多数都是必要情况。


8. 不要使用@import


有些小伙伴可能习惯使用@import引入CSS样式文件,但是其实这样做有很大的弊端。


使用@import引入CSS会影响浏览器的并行下载。使用@import引用的CSS文件只有在引用它的那个css文件被下载、解析之后,浏览器才会知道还有另外一个css需要下载,这时才去下载,然后下载后开始解析、构建render tree等一系列操作,这就导致浏览器无法并行下载所需的样式文件。



9. 减少页面重排、重绘


页面的重排重绘都会耗费浏览器性能,我们在非必要情况下应该避免,比如下面这些情况。

  • 改变元素的内外边距
  • CSS伪类激活
  • 能使用background-color,就尽量不要使用background
  • 改变font-sizefont-family


当然有些情况我们是不能避免重绘和回流的,我们视情况而定


10. 其它优化小点


  • 慎重使用高性能属性:浮动、定位
  • 去除空规则:{}
  • 属性值为0时,不加单位
  • css雪碧图,同一页面相近部分的小图标
  • 将css文件放在页面最上面


总结


CSS的性能优化因人而异,也因项目而异,但作为一个优秀的程序员,宗旨是不变的,都要往好的方向发展。

相关文章
|
3月前
|
缓存 前端开发 JavaScript
|
1月前
|
存储 缓存 前端开发
常见的css优化方案都有那些
【7月更文挑战第7天】 - 合并压缩CSS减少HTTP请求,提高加载速度。 - 精简选择器,避免复杂嵌套和通配符,提升渲染效率。 - 利用继承和公共样式减少重复代码。 - 减少浮动和定位,使用Flexbox或Grid优化布局。 - 避免CSS表达式,使用CSS Sprites减少请求。 - 控制重排重绘,减少性能消耗。 - 利用CSS变量和现代布局技术提高灵活性。 - 服务器端启用GZIP压缩,客户端缓存CSS。 综合优化可显著提升网页性能。
23 4
|
2月前
|
前端开发 JavaScript UED
CSS进阶 - CSS性能优化
【6月更文挑战第17天】**CSS性能优化关乎美观与速度。减少无用和重复样式,简化选择器,避免频繁重绘与回流,预加载关键CSS,以及模块化代码,能提升加载速度和用户体验。通过代码审查、工具辅助、选择器优化、使用transform和opacity、CSS预加载、以及文件拆分和模块化,开发者可应对复杂网页的性能挑战。**
|
11天前
|
移动开发 前端开发 JavaScript
Css3在移动设备上的优化点
Css3在移动设备上的优化点
|
3月前
|
编解码 移动开发 前端开发
【专栏:HTML与CSS移动端开发篇】使用Viewport Meta标签优化移动端显示
【4月更文挑战第30天】本文介绍了HTML的Viewport Meta标签在移动端网页优化中的作用。Viewport Meta标签定义了视口属性,如宽度、高度、初始缩放等,解决移动设备因屏幕尺寸差异导致的显示问题。主要属性包括width(常用device-width)、initial-scale、maximum-scale、minimum-scale和user-scalable。
88 4
|
3月前
|
前端开发 UED
【专栏:工具与技巧篇】CSS Sprites 与图标字体:优化网页图标加载
【4月更文挑战第30天】本文探讨了网页图标优化的两种方法:CSS Sprites和图标字体。CSS Sprites通过合并图标减少HTTP请求,提高加载速度,但维护复杂;图标字体则提供良好扩展性和定制性,易于调整大小和颜色。两者各有优劣,适用于不同场景。在实际应用中,应结合使用,根据项目需求灵活选择,以实现最佳性能优化和用户体验。
42 1
|
3月前
|
前端开发 UED 开发者
【专栏】探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施
【4月更文挑战第29天】本文探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施:简化动画路径、控制元素数量、优化代码结构、利用硬件加速及性能监测。通过实际案例展示了优化效果,强调了性能优化对提升用户体验的重要性。在开发中,应持续关注并优化动画性能,以适应网页应用的需求。
199 1
|
3月前
|
缓存 前端开发 UED
关于CSS性能优化的建议。
【4月更文挑战第13天】优化CSS性能的关键点包括:合并和压缩样式表,减少网络请求;使用简洁选择器,避免通配符;利用CSS Sprites减少请求;限制嵌套深度;创建公共样式类和继承机制;按需拆分公共CSS文件;慎用昂贵属性;考虑使用CSS预处理器;适当使用内联样式。通过这些方法,可提升网站加载速度和用户体验。
30 2
|
3月前
|
缓存 前端开发 UED
css优化的方法
css优化的方法
27 6
|
3月前
|
缓存 前端开发 JavaScript
《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)
《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)
42 0