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

相关文章
|
1月前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
61 7
|
1月前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
26 5
|
1月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
45 5
|
1月前
|
编解码 前端开发 UED
探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用
本文深入探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用。通过实际案例分析和注意事项的讨论,旨在帮助开发者更好地理解和运用媒体查询,提升移动端用户体验。
46 4
|
5月前
|
存储 缓存 前端开发
常见的css优化方案都有那些
【7月更文挑战第7天】 - 合并压缩CSS减少HTTP请求,提高加载速度。 - 精简选择器,避免复杂嵌套和通配符,提升渲染效率。 - 利用继承和公共样式减少重复代码。 - 减少浮动和定位,使用Flexbox或Grid优化布局。 - 避免CSS表达式,使用CSS Sprites减少请求。 - 控制重排重绘,减少性能消耗。 - 利用CSS变量和现代布局技术提高灵活性。 - 服务器端启用GZIP压缩,客户端缓存CSS。 综合优化可显著提升网页性能。
63 4
|
1月前
|
Web App开发 前端开发 JavaScript
如何检测 CSS 性能瓶颈并进行优化?
【10月更文挑战第28天】通过使用上述性能检测工具,结合对常见CSS性能瓶颈的分析和相应的优化方法,可以有效地提高CSS的性能,提升网页的加载速度和渲染效率,为用户提供更流畅、快速的浏览体验。
|
1月前
|
编解码 前端开发 JavaScript
如何根据性能检测结果进行 CSS 优化?
【10月更文挑战第28天】根据性能检测结果进行CSS优化需要综合考虑多个方面的因素,针对不同的问题采取相应的优化措施,不断调整和改进CSS代码,以提高页面的性能和用户体验。同时,在优化过程中要注意保持CSS代码的可读性和可维护性,确保优化后的代码仍然易于理解和修改。
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
前端开发 UED 异构计算
CSS优化技巧
【10月更文挑战第28天】通过应用这些CSS优化技巧,可以提高CSS代码的质量和性能,使页面加载更快、更流畅,同时也更易于维护和扩展,提升整个Web项目的开发效率和用户体验。
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。

热门文章

最新文章