所以我最近在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