zoukankan      html  css  js  c++  java
  • 高性能的CSS

    高性能的CSS:即代码文件加载更快,代码执行的速度更快,让页面尽快地展现在最终用户的面前。

    1、使用高效地CSS选择器

         能被浏览器快速解析和匹配的CSS选择器就是高效地选择器。

         CSS选择器的匹配原理和我们习惯的匹配过程是相反的,它是从右到左进行匹配的。

         高效的选择器意味着浏览器匹配选择器时更快速,匹配查找次数更少。

         在定义选择器时,应该尽量让第一次匹配时的数量达到最少,并且让整体的匹配查找次数最少。

         CSS选择器定义的最佳实践:

          1)避免使用通配符:通配符使用*号表示,它用来匹配页面中所有的元素。它匹配的计算量非常大。

    /*避免使用*/
    * {
        font-size: 16px;
    }

          2)避免使用标签选择器和单个属性选择器作为关键选择器:在一个选择符中,最右边的选择器是关键选择器。关键选择器决定着浏览器初始匹配的元素数量,它也是整个选择符整体匹配次数的最主要决定者。

    /*避免使用*/
    .references p.list div {
        font-style: italic;
    }
    .references p.list [data-link="red"] {
        color: #f00;
    }

          3)不要在ID选择器前使用标签名:在ID选择器前添加标签名是多余的。

    /*避免使用*/
    div#page_index {
        color:#f00;
    }
    /*推荐使用*/
    #page_index {
        color:#f00;
    

          4)尽量不要在选择符中定义过多的层级,最好不要超过三层:选择器的层级关系越深,浏览器顺着Dom数查找匹配选择器的次数就越多。

        一个CSS选择器性能测试的实验网站:CSS selectors Test:http://stevesouders.com/efws/css-selectors/tests.php。该网站用于测试各种CSS选择器的开销。

        也可以使用工具检测页面CSS选择器的效率,比如Chrome浏览器自带的开发工具。

        CSS样式还是以可维护性为主,提升性能为辅,要在保证CSS样式的可维护性前提下来编写高性能的CSS选择器。

    2、CSS相关的图片处理

        1)不要设置图片的尺寸

            利用样式缩放图片会带来CPU的额外计算过程,增加了图片在浏览器中的渲染时间。因此,在制作图片时,尽量按照实际需求的尺寸制作。缩略图和实际的图片不要使用相同的图片。最佳的做法是针对原始图片,单独做一套缩略图。

        2)使用CSS“雪碧”图(CSS Sprite)技术

           CSS Sprite技术,一般翻译为CSS精灵,或者CSS“雪碧”图。它可将零散的背景图合并为一张大图,再利用CSS的background-position进行背景定位。

           CSS Sprite的优点:减少了网络请求的次数,提高了图片整体的加载速度;方便网站更换风格。

           CSS Sprite的缺点:开发过程烦琐、维护过程复杂、使用不当,则会导致性能问题:内存消耗(合并后的图片可能会很大)。

           使用CSS Sprite的一些最佳实践:

            (1)在项目后期应用CSS Sprite技术

            (2)合理组织“雪碧”图

                    在“雪碧”图中,组织背景主要是按照模块和背景图的风格来划分。按照模块划分的优点是方便代码维护,而按照风格划分则是方便背景图的维护以及网站整体风格的更改。

            (3)控制“雪碧”图的尺寸和大小

                   推荐长度和宽度相乘不要超过2500。“雪碧”图的大小不要超过200KB。

            (4)合理控制背景图单元之间的距离以及背景图的位置

                   此原则的目的是为了防止当背景图尺寸比实际应用的元素尺寸小时,背景中出现其他无关的背景图。

             (5)借助工具

                    “雪碧”图最大的缺点是维护困难,但是借助于合适的工具,可降低维护的困难程度。

                    在线的CSS Sprite生成器:CSS Sprite Qenerator:http://spritegen.website-performance.org。用户通过上传一个包含多个背景图的压缩包,工具会自动生成由这些背景图组成的“雪碧”图。它允许用户设置背景图单元的水平和垂直偏移、指定透明度及背景色等。

                   Sprite Cow:http://www.spritecow.com。用户上传已有的“雪碧”图,并使用鼠标操作选中某个背景图单元,工具就会自动生成对应的CSS代码。

                   SpriteMe:www.spriteme.org。可通过分析网页,来产生“雪碧”图及对应的CSS代码。

    3、减少CSS的代码量

        1)定义简洁的CSS规则:主要是指合并相关规则和定义简洁的属性值。

        2)合并相关CSS规则

             CSS中的某些样式是由多个规则组成的,比如字体样式。

    p.reader-title {
                    font-family: Georgia,serif;
                    font-size: 12px;
                    font-style: italic;
                    font-weight: bold;
                    line-height: 30px;
                }
    /*推荐使用,合并后的样式*/
                p.reader-title {
                    font:italic bold 12px/30px Georgia,serif;
                }

           类似的样式还有background、border、margin、padding、text、list-style、transform、transition、animation等。

         3)定义简洁的属性值

            有些属性值可以使用更简洁的方式来展现,比如颜色和尺寸。

    p.reader-title {
                    color: #ff33ff;
                    font-size: 0.8em;
                    padding:0em;
    }
    /*推荐使用,简洁的属性值*/
                p.reader-title {
                    color: #f3f;
                    font-size: .8em;
                    padding: 0;
                }

         4)合并相同的定义

             在CSS代码中,定义的规则会有相同的部分。可以合并这些相同的样式定义,达到代码重用和缩减代码的目的。

    .library-title {
                    text-align: center;
                    font-weight: 700;
                    overflow: hidden;
                    text-overflow: ellipsis;
                    color: #fff;
                    font-size: 1.2em;
                    line-height: 2em;
                }
    .search-title {
                    text-align: center;
                    font-weight: 700;
                    overflow: hidden;
                    text-overflow: ellipsis;
                    color: #fff;
                    font-size: 1.4em;
                    line-height: 2.5em;
                }
    /*推荐使用,合并后的样式代码*/
                .library-title, .search-title {
                    text-align: center;
                    font-weight: 700;
                    overflow: hidden;
                    text-overflow: ellipsis;
                    color: #fff;
                }
                .library-title {
                    font-size: 1.2em;
                    line-height: 2em;
                }
                .search-title {
                    font-size: 1.4em;
                    line-height: 2.5em;
                }

              在CSS中,有些属性是可以继承的,比如color、font、line-height、list-style、text-align、text-index、text-transform等。如果某个父元素的多个子元素上设置了相同的可继承的属性定义,则可以把相同的定义合并,且设置在父元素上。

         5)删除无效的定义

             无效的定义包括无效的规则及无效的样式属性。

             无效的规则一般是在开发过程中引入的,从直观上是无法判断某个规则是否已经失效。可以使用工具来进行查找,比如,用Chrome浏览器自带的开发工具就可以查找CSS代码中无效样式。

             无效的样式属性指的是设置的样式并没有起作用。比如设置内边距为负值,以及一些因手误引起的属性值拼写错误。同样,使用Chrome浏览器自带的开发工具就可以检测无效的属性定义。

    /*无效的样式属性*/
                .invalid-css {
                    padding-top: -20px;
                    border: 1px soild #ddd;  /*solid*/
                }

    4、其他CSS高性能实践

       1)避免使用@import:有开发者详细分析了使用@import的缺点:http://www.stevesouders.com/blog/2009/04/09/dont-use-import。

       2)避免使用IE浏览器独有的样式:图片滤镜和CSS表达式

             图片滤镜的使用会在图片加载时阻塞浏览器的加载和渲染,并会增加额外的内存开销。

    .image-title {
                    filter: opacity(30%);
                 }

               CSS表达式的作用是动态设置CSS属性。使用CSS表达式不只是有兼容问题,还有性能问题。例如,在浏览器大小改变、窗口滚动时,会使得浏览器频繁计算,性能损耗极大。

    <!--使用CSS表达式的例子-->
    <div id="oDiv"
             style="background-color: #cfcfcf;position: absolute;
             left: expression(document.body.clientWidth/2-oDiv.offsetWidth/2);
             top: expression(document.body.clientHight/2-oDiv.offsetHight/2)">
             Example DIV
    </div>
  • 相关阅读:
    华为超级应用联合创新计划启动,共同打造极致用户体验
    华为P20无敌拍摄能力开放 如何即刻获得?
    两千万次服务的背后,华为终端开放实验室到底做了什么?
    HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度
    搜狐新闻APP是如何使用HUAWEI DevEco IDE快速集成HUAWEI HiAI Engine
    旅行助手:重新定义旅行
    世界更清晰,搜狐新闻客户端集成HUAWEI HiAI 亮相荣耀Play发布会!
    Android和设置alpha(图像)透明度
    Android应用开发欢迎界面不想显示最上面的LOGO
    聊天页面输入框和发送按钮的布局问题 Android
  • 原文地址:https://www.cnblogs.com/209yin/p/7689216.html
Copyright © 2011-2022 走看看