时间:2014-01-29所属栏目: Html+css 来源: 热度:
我们写的CSS的效率是怎么样的呢,浏览器渲染的速度又如何呢?
这应该是浏览器开发者应该关心的,因为页面加载更快,用户就会更愉快。
这也是前端开发人员应该关心的,因为他们写出的文件需要高度的迎合浏览器。
下面就介绍13种优化CSS渲染速度的方法。当然方法很多,如果本人有发现会在之后的文章中补充,欢迎继续关注我爱猫猫技术博客。
编写十六进制颜色值时你可能会用小写字母或省略成3位数,关于这写法没找到确实的数据证明对浏览器的渲染效率是否有影响,但十六进制的颜色值默认标 准是大写及6位数标注。相信很多的人在择简写颜色值的原因是减少文件的大小,因为颜色值简写之后会节省出3个字节,如果是一个浏览量很大的网站的话,这个 简写的部分所减小的流量也是很乐观的。但是没有人愿意在未知情况下因为冒险而降低渲染的效率。
不赞成 – color:#f3a;
建议用 – color:#FF33AA。
对于我而言还是支持颜色简写的,因为在如此长的时间中那么多人在使用颜色简写都没有发现任何的问题。
这两个属性都是用于设置或检索是否显示对象。display隐藏对象不保留物理空间,visibility为隐藏对象保留占据的物理空间。当浏览器渲染被占据的物理空间时,会有一定消耗资源,避免这种情况的发生可以优化系统资源。
不赞成 – visibility:hidden;
建议用 – display:none。
和display与visibility的关系类似,border:none;与border:0;分别是不保留与保留边框空间。 border:0;尽管可以隐藏掉边框,但它会为你保留border-color/border-style的使用权,当border-color /border-style的使用权存在时,浏览器解析的时候会去解析到这两个代码,这样会额外的耗费系统资源。
不赞成 – border:0;
建议用 – border:none。
一张宽高1px的背景图片,虽然文件体积非常之小,但渲染宽高500px的板块需要重复平铺2500次。提高背景图片渲染效率跟图片尺寸及体积有关,最大的图片文件体积保持约70KB左右。
不赞成 – 宽高8px以下的平铺背景图片,
建议用 – 衡量适中体积及尺寸的背景图片。
我想关于这个图片的重复应该要注意一下,如果重复的多,造成的HTTP请求数就多,势必会造成额外的资源浪费,但是至于是不是8px我觉得应该好好商榷,另外70k文件也有待考究。
滤镜作为IE的特有属性,除了比较消耗资源外也有兼容性问题。对于IE的PNG透明滤镜可采用GIF或JPG似透非透的办法来避免使用此滤镜。建议只在IE6应用GIF透明,因为IE7以上已经支持了PNG透明。
另外我想说的是IE的滤镜并非一无是处,很多效果都可以用滤镜来实现,但是IE滤镜非常的消耗系统资源,甚至可以干死一个页面,典型的例子就是08年汶川地震时候的优酷首页,如果你的网络稍微差一点,或者电脑配置差一点,打开页面就会直接死机的。
不赞成 - 滥用IE滤镜因为消耗资源外也有兼容性问题,
建议用 - 最好选择其它方法能避免使用滤镜。
*通配符把所有标签都初始化一遍,浏览器在渲染的时候消耗了一定的资源。有的标签在不同浏览器上几乎无差异,或是某些已经不推荐使用的标签(因为你不会去用它)不需通配符要重新初始化一遍,如果不使用通配符能节省一点资源。
不赞成 - 使用*号通配符,
不赞成 - div、span、button、b、table等标签纳入通配符控制内外填充样式,
建议用 - 有选择性地使用通配符控制内外填充样式。
但是我们这里还是要重复一个问题那就是如果在CSS样式表之前使用标签选择符,比如:
html,body,table,div,title,p,h1,h2,h3,a,img,head {margin:0px; padding:0px;}
这样做会额外的增加很多的字节,对于站点来说似乎也不是一个很优秀的做法。
如果你有一个选择器是以id作为关键选择符,请不要添加多余标签名上去。因为ID是唯一的,你不要为了一个不存在的理由而降低了匹配的效率。
不赞成 – button#backButton { },
不赞成 – .menu-left #newMenuIcon { },
建议用 – #backButton { },
建议用 – #newMenuIcon { }。
降低系统效率的一个最大原因是我们在标签类中用了过多的选择符。通过添加class到元素,我们可以将类别进行再细分为class类,这样就不用为了一个标签浪费时间去匹配过多的选择符了。
不赞成 – treeitem[mailfolder="true"] > treerow > treecell { }
建议用 – .treecell-mailfolder { }
子孙选择符是CSS中最耗资源的选择符(有待商榷)。他真的是非常的耗资源,尤其是在选择器使用标签类或通用类的时候。很多情况中,我们真正想要的是子选择符。除非有明确说明,在UI CSS中是严禁使用子孙选择符的。
不赞成 – treehead treerow treecell { },
好一点,但还是不行 – treehead > treerow > treecell { }。
不要在标签类中使用子选择符。否则,每次元素的出现,都会额外地增加匹配时间。(特别是当选择器似乎多半会被匹配的情况下)。
不赞成 – treehead > treerow > treecell { }
建议用 – .treecell-header { }
小心地使用子选择符。如果你能想出一个的不使用他的方法,那么就不要使用。特别是在RDF树和菜单会频繁地使用子选择符。
不赞成 – treeitem[IsImapServer="true"] > treerow > .tree-folderpane-icon { }
请记住RDF的属性是可以在模板中被复制的!利用这一点,我们可以复制那些想基于该属性改变的子XUL元素上的RDF属性。
建议用 – .tree-folderpane-icon[IsImapServer="true"] { }。
浏览器如何读取你的CSS选择器有一个很重要的原则,那就是它们从右到左读取。这意味这像ul>li a[title="home"]这样的选择器,a[title="home"]将是最先被读取的。这一部分通常被称为 “key selector”选择器的最后一部分,也是被选择的标签。
后代选择器是CSS里最昂贵的选择器,昂贵得可怕——特别是当它放在标签和通用符后面时。就如下面这个东东一样,绝对的效率毒瘤:html body ul li a { }。遍历的标签越多消耗的资源越大。