所以我最近在Concrete5上做了很多工作。我注意到,不过,默认的主题已经被像这样定义许多 CSS规则:更快的两个CSS规则:有/没有指定多个ID
#page #central #sidebar p{line-height:24px}
由于“侧边栏”是一个ID应该只有一个整页的“侧边栏”(假设它验证,我正在照顾它)。因此,如果#sidebar
在#page #central
中,它应该总是在#page #central
。无论。在每一页上。
通过这样的逻辑,以下规则不完全一样的事情:
#sidebar p{line-height:24px}
测试这一点,果然,它的工作。所以我的问题是 - 哪个会有更好的表现?有没有速度相关的原因,Concrete5团队采用更长的规格,还是仅仅是为了帮助未来的开发者找到#sidebar
div?无论哪种情况,我都可以看到它的速度更快。
如果壳体1更快(#page #central #sidebar
):
如果浏览器使用广度优先搜索算法来定位适当的DOM元素,然后找到#sidebar
将涉及搜索的EVERY DOM元素的第二层,它在到达第三层之前有孩子,在找到#sidebar
之前,它仍然会有几个元素。通过以这种方式指定元素,广度优先搜索将识别#page
并且知道它只需要在此元素内继续搜索,而不是继续整个DOM。
如果壳体2是更快(#sidebar
):
如果浏览器搜索的顺序整个文档它的写入,而不是处理DOM就像一棵树,那么这将是执行单个线性搜索,而不是三个线性搜索。事实上,即使在最好的情况下,它足够聪明,可以识别先前找到的DOM元素的开始点和结束点(基本上是深度优先搜索),但它仍然需要读取尽可能多的代码行一个线性搜索 - 首先它会读取,直到找到#page
,那么它将开始从#page
开始读取,直到它找到#center
,然后它会从#center
开始读取,直到找到#sidebar
。唯一的区别就是从一个搜索切换到另一个搜索时涉及的微量开销
我确实意识到这一点,但我并未打算删除特殊格式所需的任何元素。例如,`#page #central#main`和#page#central.leftSidebar#main`这两行分别替换为`#main`和`.leftSidebar#main`。这样我使用最少数量的规格,同时仍然保持格式。 – stevendesu 2011-01-24 13:24:05