美文网首页
浏览器对于css选择器的解析

浏览器对于css选择器的解析

作者: DouQing | 来源:发表于2017-08-13 18:39 被阅读0次

【转载自】:http://www.cnblogs.com/zhaodongyu/p/3341080.html

浏览器对于css选择器是如何解析的?我想大多数人可能和我之前的认知是一样的,从左向右开始查询,先找到.mod-nav,然后逐级匹配h3、span,在这个过程中如果遍历到叶子节点都没有匹配就需要回溯,继续寻找下一个分支。

但事实上,CSS选择器的读取顺序是从右向左。

.mod-nav h3 span {
font-size: 16px;
}

如上面的代码,它的读取顺序应该是:先找到所有的span,沿着span的父元素查找h3,中途找到了符合匹配规则的节点就加入结果集;如果直到根元素html都没有匹配,则不再遍历这条路径,从下一个span开始重复这个过程(如果有多个最右节点为span的话)。

在某条CSS规则下(比如.mod-nav h3 span),会形成一条符合规则的索引树,树由上至下的节点是规则中从右向左的一个个选择符匹配的节点。

为什么从右向左的规则要比从左向右的高效?

image

假如DOM的结构如上图,匹配规则是.mod-nav h3 span。

若从左向右的匹配,过程是:从.mod-nav开始,遍历子节点header和子节点div,然后各自向子节点遍历。在右侧div的分支中,最后遍历到叶子节点a,发现不符合规则,需要回溯到ul节点,再遍历下一个li-a,假如有1000个li,则这1000次的遍历与回溯会损失很多性能。

再看看从右至左的匹配:先找到所有的最右节点span,对于每一个span,向上寻找节点h3,由h3再向上寻找class=mod-nav的节点,最后找到根元素html则结束这个分支的遍历。

很明显,两种匹配规则的性能差别很大。之所以会差别很大,是因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点);而从左向右的匹配规则的性能都浪费在了失败的查找上面。

当然这是比较明显情况,如果在叶子上存在多个不符合条件的span,从右向左的规则也会走一些弯路(这时就需要优化CSS选择器了)。但平均来说它还是更高效,因为大多时候,一个DOM树中,符合匹配条件的节点(如.mod-nav h3 span)远远远远少于不符合条件的节点。

jQuery从1.3版本开始使用的Sizzle引擎,它按照了CSS选择器的匹配规则(从右至左)进行DOM元素的查找与匹配(当然其中做了很多优化),性能得到了很大的提升。

相关文章

  • 【CSS】选择器解析规则

    当我们接触css选择起的时候,会认为浏览器解析css选择器是从左向右解析;其实不然浏览器解析css选择器是从右向左...

  • 2.CSS

    //CSS基础 Cascsding Style Sheet(层叠样式表)CSS选择器1.浏览器的解析方式是从右向...

  • 浏览器对于css选择器的解析

    【转载自】:http://www.cnblogs.com/zhaodongyu/p/3341080.html 浏览...

  • 简析浏览器渲染机制

    浏览器渲染流程1.浏览器解析(1)浏览器解析HTML,构建DOM树(2)浏览器解析css,构建CSS规则树(2)解...

  • 使用CSS修改HTML5 input placeholder颜色

    **CSS选择器**因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定。 ::-webki...

  • 有关CSS

    如何写出更好的CSS?(CSS是从右往左进行解析) ①避免使用*(全局)选择器。(耗费性能) ②CSS选择器的层级...

  • 浏览器如何解析 CSS 选择器?

    浏览器从右往左(也称为自底向上)解析 CSS 选择器,这样的匹配节点的方式可以快速、准确的与 render 树上的...

  • 经典面试题:浏览器是怎样解析CSS的?

    摘要: 理解浏览器原理。 原文:浏览器解析 CSS 样式的过程 作者:前端小智 解析 一旦 CSS 被浏览器下载,...

  • CSS和网络性能

    CSS和网络性能 CSS对于呈现页面至关重要 - 在找到、下载和解析所有CSS之前,浏览器不会开始呈现 - 因此我...

  • 如何提升 CSS 选择器性能

    CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器...

网友评论

      本文标题:浏览器对于css选择器的解析

      本文链接:https://www.haomeiwen.com/subject/nzuerxtx.html