css命名長度對查找效率有影響嗎?
忽略層級
CSS名字太長的話會有問題嗎?
首先要看一下瀏覽器是怎麼處理CSS選擇器的,它會先把CSS文本格式化成styleRule對象,如:
#world {
margin: 20px;
}
會變成:
selector text = 「#world」
value = 「world」 matchType = 「Id」 relation = 「SubSelector」
上面包含了選擇器的type和value,由於它是一個ID選擇器,會被放到一個ID的哈希Map裡面,有四個哈希map,如下所示:
CompactRuleMap m_idRules; //ID
CompactRuleMap m_classRules; //類名
CompactRuleMap m_tagRules; //標籤
CompactRuleMap m_shadowPseudoElementRules; //偽類
如果要查找某個選擇器的樣式屬性的話就在哈希map裡面進行查找,哈希的查找時間是O(1)常數的,所以會比較快。
CSS名字太長對上述過程會有兩個影響:
- 解析CSS選擇器名字時循環字元要長一些
- 計算哈希的時間會長一點,因為瀏覽器如Chrome對字元串哈希演算法是循環每個字元串累計哈希值(running_hash),所以循環計算的時間也要長一點,但由於哈希的過程是位運算,位運算是很快的。可參考以下代碼:
uint32_t StringHasher::AddCharacterCore(uint32_t running_hash, uint16_t c) {
running_hash += c;
running_hash += (running_hash &<&< 10);
running_hash ^= (running_hash &>&> 6);
return running_hash;
}
由於上面兩個處理都是循環字元串然後做些簡單處理,時間是O(N)的,數據量幾和幾十的時間差是很小的,你類的名字長度不可能千級萬級吧。
類名長的話,你的html相應地也要變大,一個類名50個字元,還寫了100個,每個後面有跟子選器規則的有10個,光是這些類名就有50k了。先別說體積,自己敲著都累,一般也不會搞得這麼奇葩吧。
所以在性能方面應該不用擔心類名長的問題,你的類名應該簡單易懂,就跟變數命名一樣,要是搞太長,自己敲起來累,看起來也累,可能像做閱讀理解一樣。如會飛的豬就搞一個.flying-pig就好了,不要搞一個.flying-in-the-sky-pig的類,可以說效率方面的影響是比較微小的,但看起來累啊。
影響可以忽略不計,要是真較真的話 是有影響的
1 文件體積增大導致載入速度變慢 html 寫長的className比短的體積要大,同理css,js文件也會增大2 查詢效率變慢
不管瀏覽器怎麼使用樣式的,肯定是要匹配到className的 需要用到字元串比較 字元串比較需要足個字元比較 短的顯然比長的速度要快一些3 過度長對開發者不友好對程序來說幾乎沒有,你總不能長到幾kb的程度吧,對人來說當然是要語義化才行,推薦英語和短橫線靈活運用,忌諱中文拼音數字或者亂打字母這些。
有影響,但是不該你考慮。所以你應該當作沒影響
一般來說你瓶頸期還到不了這裡
:hover :before :after這些偽類選擇器性能不及id class甚至也沒有很多人喜歡的addClass("hover")好
還不是一群人在用
你一個頁面除非特複雜 能有多少dom元素有多少css 先優化dom再考慮css的命名吧
長度不知道咧。我們公司大牛的研究結果是,從右往左查,所以少些.a p,span之類的,最後的別標籤結尾。然後層級不要太深,超過5級。
推薦閱讀:
TAG:HTML | CSS | JavaScript | Less | Sass |