`

如何编写高性能CSS

CSS 
阅读更多

避免使用@import
有两种方式加载样式文件,一种是link元素,另一种是CSS 2.1加入@import。而在外部的CSS文件中使用@import会使得页面在加载时增加额外的延迟。虽然规则允许在样式中调用@import来导入其它的CSS,但浏览器不能并行下载样式,就会导致页面增添了额外的往返耗时。比如,第一个CSS文件first.css包含了以下内容:@import url(“second.css”)。那么浏览器就必须先把first.css下载、解析和执行后,才发现及处理第二个文件second.css。简单的解决方法是使用 标记来替代@import,比如下面的写法就能够并行下载CSS文件,从而加快页面加载速度:

<link rel="stylesheet" />
<link href="second.css" rel="stylesheet" />

需要注意的是一个页面中的CSS文件不宜过多,否则应该简化及合并外部的CSS文件以节省往返请求时间(RTT)提升页面加载速度。

避免AlphaImageLoader滤镜
IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

避免CSS表达式
CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

background-color: expression((new Date()).getHours()%2?"#FFFFFF": "#000000" )

如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用,因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。
表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。一个减少CSS表达式计算次数的方法就是使用一次性的表达式,它在第一次运行时将结果赋给指定的样式属性,并用这个属性来代替CSS表达式。如果样式属性必须在页面周期内动态地改变,使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。

避免通配选择器
CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免需要消耗更多匹配时间的选择器。而在这之前我们需要了解CSS选择器匹配的机制,如例子的子选择器规则:

#header > a {font-weight:blod;}

我们中的大多数人都是从左到右的阅读习惯,可能也会习惯性的设定浏览器也是从左到右的方式进行匹配规则,因为会推测这条规则的开销并不高。我们这样假象浏览器会像这样的方式工作:找到唯一的id为header为的元素,然后把这个样式规则应用到直系子元素中的a元素上。我们知道文档中只有一个id为header的元素,并且它只有几个a类型的子节点,所以这个CSS选择器应该相当高效。
事实上,却恰好相反,CSS选择器是从右到左进行规则匹配。了解这个机制后,例子中看似高效的选择器在实际中的匹配开销是很高的,浏览器必须遍历页面中所有的a元素并且确定其父元素的id是否为header。
如果把例子的子选择器改为后代选择器则会开销更多,在遍历页面中所有a元素后还需向其上级遍历直到根节点。

#header  a {font-weight:blod;}

理解了CSS选择器从右到左匹配的机制后,可以理解选择器中最右边的规则往往决定了浏览器继续左移匹配的工作量,我们把最右边选择规则称之为关键选择器。
通配选择器使用 * 符合表示,可匹配文档中的每一个元素。如下例规则将所有元素的字体大小设置为20px:

* { font-size:20px;}

通配选择器作用于所有的元素,如规则最右边为通配符:

.selected * {color: red;}

浏览器匹配文档中所有的元素后分别向上逐级匹配class为selected的元素,直到文档的根节点,因此其匹配开销是非常大的,通常比开销最小的ID选择器高出1~3个数量级,所以应避免使用关键选择器是通配选择器的规则。

避免单规则的属性选择器
属性选择器根据元素的属性是否存在或其属性值进行匹配,如下例规则会把herf属性值等于”#index”的链接元素设置为红色:

.selected [href=”#index”] {color: red;}

但其匹配开销是非常大的,浏览器先匹配所有的元素,检查其是否有href属性并且herf属性值等于”#index”, 然后分别向上逐级匹配class为selected的元素,直到文档的根节点。所以应避免使用关键选择器是单规则属性选择器的规则。

避免类正则的属性选择器
CSS3添加了复杂的属性选择器,可以通过类正则表达式的方式对元素的属性值进行匹配。当然这些类型的选择器定是会影响性能的,正则表达式匹配会比基于类别的匹配会慢很多。大部分情况下我们应尽量避免使用 *=, |=, ^=, $=, 和 ~=语法的属性选择器。

 

移除无匹配的样式
移除无匹配的样式,有两个好处:
第一,删除无用的样式后可以缩减样式文件的体积,加快资源下载速度;
第二,对于浏览器而言,所有的样式规则的都会被解析后索引起来,即使是当前页面无匹配的规则。移除无匹配的规则,减少索引项,加快浏览器查找速度;

分享到:
评论

相关推荐

    CSS高性能开发-源代码

    高性能的CSS开发是网站优化的重要环节,能够提高页面加载速度,提升用户体验,降低服务器负载。本资料“CSS高性能开发-源代码”提供了关于这一主题的深入学习资源,下面我们将详细探讨相关的知识点。 1. **选择器的...

    高性能CSS属性和SVG属性动画JS库插件

    总的来说,Animate Plus是一款强大的工具,为开发者提供了制作高性能CSS和SVG动画的便利。它不仅简化了动画的创建过程,还确保了在多种设备和环境下的高性能表现,对于追求高品质用户体验的Web开发者来说,是不可或...

    DIV+CSS的学习资料(两本书,见描述)

    6. **性能优化**:提供关于如何编写高性能CSS的建议,如减少重绘和回流、避免使用通配符选择器等。 7. **调试技巧**:指导读者如何使用开发者工具进行CSS的调试和分析。 8. **CSS工作流程**:分享最佳实践和工作流程...

    轻量级高性能的CSS3动画库特效.zip

    "轻量级高性能的CSS3动画库特效.zip" 提供了一个高效、轻便的解决方案,旨在帮助开发者快速实现各种复杂的视觉效果。这个库充分利用了CSS3的强大功能,同时也优化了JavaScript的性能,确保在不同设备上都能流畅运行...

    CSS高性能开发-源代码.zip

    在CSS高性能开发中,我们关注的是如何有效地编写和优化CSS代码,以确保网页在各种设备和浏览器上快速加载和流畅运行。以下是一些关键的知识点,涵盖了从基础到高级的CSS性能优化技巧。 1. **选择器的效率**:CSS...

    Go-go-css用Go编写的一个非常简单CSS解析器

    使用Go语言来编写CSS解析器,充分利用了Go的并发特性、内存管理和高性能。Go语言的语法简洁明了,使得代码易于理解和维护,这对于解析器这样的基础工具来说非常重要。 在CSS解析器的设计上,"Go-go-css"可能包含...

    精通CSS高级Web标准解决方案 PDF

    此外,还会介绍如何利用CSS进行性能优化,如减少重绘和回流,以及如何编写可维护和可扩展的CSS代码。 在“精通CSS”的过程中,读者还将学习到如何组织和管理CSS代码,包括使用预处理器(如Sass或Less)来提高工作...

    JS和CSS和C++互相调用

    标题 "JS和CSS和C++...JS通过DOM和CSSOM控制页面动态行为和样式,C++作为底层引擎提供高性能支持,而CSS则专注于页面布局和视觉表现。通过理解这些语言间的交互方式,开发者可以更好地构建高效、互动的Web应用程序。

    怎样建设高性能网站,合理建设网站

    在构建高性能网站的过程中,合理的设计和优化至关重要。本篇文章将深入探讨如何利用HTML、CSS以及相关的技术策略,提升网页加载速度,打造一个高效且用户体验优良的网站。 首先,我们需要理解高性能网站的基础——...

    css样式工具 css学习工具

    4. 高级技巧:研究预处理器和PostCSS,学习媒体查询进行响应式设计,了解CSS性能优化。 综上,掌握CSS不仅需要理解基本语法,还要熟练运用各种工具和资源,不断学习新的技术和最佳实践,以便在实际工作中提高效率,...

    css界面 css secret

    10. **CSS性能优化**:讨论如何编写高效的CSS代码,减少渲染阻塞,提高网页加载速度和性能。 通过阅读《CSS揭秘》,开发者不仅可以掌握更多的CSS技巧,还能培养出解决问题的创新思维,提升自己的CSS设计能力。这...

    TheFasttheme使用原生js少量css打造高性能快响应又简洁的主题

    【TheFasttheme】是一款以高性能、快响应和简洁设计为特点的主题,主要依赖原生JavaScript...通过研究和使用这个主题,开发者可以学习到如何优化JavaScript代码,编写简洁有效的CSS,以及如何构建高性能的Jekyll站点。

    精通CSS 第三版

    《精通CSS 第三版》是一本专为想要深入理解CSS技术的读者精心编写的书籍。CSS,即层叠样式表(Cascading Style Sheets...通过阅读这本书,你可以系统地提升CSS技能,为创建美观、功能强大且高性能的网页奠定坚实基础。

    经典的CSS面试题(含答案)

    CSS预处理器允许编写更高级的CSS语法,如变量、嵌套规则、混合(mixins)和函数,编译后生成标准的CSS代码。 9. **如何实现CSS动画?** CSS动画通过`@keyframes`规则定义,然后使用`animation`属性将动画应用到...

    css那些事儿---css

    最后,高级CSS技巧可能包括CSS预处理器(如Sass、Less),它们提供变量、嵌套规则和混合等特性,简化CSS编写;还有CSS变量(又称CSS自定义属性),允许在全局范围内定义和重用样式值;以及CSS计算函数,可以进行动态...

    高效、可维护、组件化的CSS

    在当今的Web开发中,编写高效、可维护且具备组件化的CSS对于前端开发人员来说是一项基础且至关重要的技能。...通过遵循以上建议,无论是新手还是追求优化性能的同学,都能够编写出更加高效且易于维护的CSS代码。

    精通CSS第二版、CSS那些事、CSS权威指南 第3版

    在CSS的实践应用中,我们可能会遇到各种各样的问题和挑战,比如如何优化选择器以提高渲染性能,怎样设计高效的布局策略,以及如何在保证网页响应性的同时进行性能优化。作者通过分享个人在工作中遇到的问题和解决...

    css处理器新时代

    开发者可以使用插件自动添加浏览器前缀,转换未来CSS语法,或者进行性能优化。例如,autoprefixer插件可以自动分析CSS并添加必要的浏览器前缀,确保在各种浏览器中兼容。 CSS处理器的使用极大地提升了开发者的生产...

Global site tag (gtag.js) - Google Analytics