假如有如下的一段HTML:
![](https://img.haomeiwen.com/i16877836/6aec56f6616017a6.png)
和如下的CSS:
![](https://img.haomeiwen.com/i16877836/e42a2cb3873f1a81.png)
假如我们的CSS解析器是从左往右进行匹配的,那么会生成如下的style rules:
![](https://img.haomeiwen.com/i16877836/96029e76c3dcf7cf.png)
首先,#div1 .c .d {} .f .c .d {}.c .d{}这三个选择器里面都含有 .c .d{}这么一个公用样式,所以哪怕是我们的DOM节点明确了是在#div1下面都必须对style rules进行全部的匹配查找,这样一来基本上可以说是每一个DOM节点都必须完全遍历一遍style rules,不然搞不好就会漏掉一些公用样式之类的,所以想着将层级写的更加详细就能去掉很多不对应的CSS选择器的索引路径的就不要想了,不管你写的多细,你总是需要把整个style rules都遍历一遍,不然万一漏掉了某个公用样式不就思密达了?
那么如果我们换成从右向左进行解析就能够避免这种情况了么?请看下面这个style rules:
![](https://img.haomeiwen.com/i16877836/2475e5042a39dfb0.png)
别的先不提,最少这个节点就少了很多嘛,哪怕我这里同样是需要全部遍历一遍就冲着减少了这么多个节点也要从右往左进行解析啊!
网友评论