面試官:說說你對(duì)css效率的理解

大家好痢毒,我是小雨小雨儿惫,致力于分享有趣的泵琳、實(shí)用的技術(shù)文章尖飞。
內(nèi)容分為翻譯和原創(chuàng)匆背,如果有問題忘晤,歡迎隨時(shí)評(píng)論或私信窃判,希望和大家一起進(jìn)步燥爷。
大家的支持是我創(chuàng)作的動(dòng)力寄摆。

選擇器的優(yōu)先級(jí)

眾所周知谅辣,選擇器是有權(quán)重的,優(yōu)先級(jí)從低到高婶恼,如下所示:

  • 類型選擇器(例如桑阶,h1)和偽元素(例如,::before)
  • 類選擇器 (例如勾邦,.example)蚣录,屬性選擇器(例如,[type="radio"])和偽類(例如眷篇,:hover)
  • ID 選擇器(例如包归,#example)
  • !important 此聲明將覆蓋任何其他聲明,不建議使用铅歼,除非以下幾種情況:
  1. 覆蓋內(nèi)聯(lián)樣式
  2. 覆蓋優(yōu)先級(jí)絕對(duì)高的選擇器

選擇器解析

雖然我們平常寫css選擇器是從左到右書寫的:

根節(jié)點(diǎn) .子節(jié)點(diǎn) .孫節(jié)點(diǎn){

}

但是公壤,這只不過是為了方便使用者書寫,真正的解析順序是反過來的椎椰,也就是從子節(jié)點(diǎn)搜索到根節(jié)點(diǎn)厦幅,原因很簡(jiǎn)單,因?yàn)椴檎掖螖?shù)將大大影響效率慨飘。一個(gè)個(gè)來說

由于css tree是樹結(jié)構(gòu)确憨,如果從根節(jié)點(diǎn)開始,那么就是類似深度優(yōu)先遍歷的查找方式瓤的,一圖辟千言:

image

如果到最后一個(gè)子節(jié)點(diǎn)仍然找不到的話休弃,就是回到之前的父節(jié)點(diǎn),繼續(xù)查找其他的子節(jié)點(diǎn)圈膏,其實(shí)看起來也沒毛病哈塔猾,那我們來個(gè)對(duì)比,看下css為什么選擇從左到右解析稽坤。

一樣的圖丈甸,換了個(gè)解析方向:

image

很明顯的差別就是糯俗,我們的判斷條件提前了,先判斷孫節(jié)點(diǎn)是否匹配睦擂,只有匹配才會(huì)繼續(xù)深入得湘,否則直接跳過,然后這就從多個(gè)多條線(深度優(yōu)先遍歷)變成了多個(gè)單條線的問題顿仇,有點(diǎn)類似于從O(n2) => O(n)的意思淘正,大大提高了元素匹配效率。

大白話解釋就是: 從右到左解析比從左到右解析減少了查找失敗的次數(shù)和深度

還有一點(diǎn)就是公共樣式臼闻,對(duì)于公共樣式跪帝,其實(shí)就是多個(gè)相同的樣式,從子節(jié)點(diǎn)到根節(jié)點(diǎn)是完全相同的些阅,也就是一條線即可

書寫高效css選擇器

  • 優(yōu)先就是避免使用通配符匹配,這樣css從右到左的解析就白搭了斑唬,莫得用處了市埋。就和從左到右一樣一樣的了。
  • 之前提到的選擇器優(yōu)先級(jí)ID選擇器是最高的恕刘,但這僅僅限于單獨(dú)用ID選擇器缤谎,如果你和其他選擇器混合使用的話,就發(fā)揮不到id選擇器的唯一高效性了褐着。為什么呢坷澡?因?yàn)閺挠业阶蠼馕鲅剑热?#box .text含蓉,會(huì)先進(jìn)行類選擇器的查找频敛,最后才是ID選擇器,所以ID選擇器就顯的沒那么重要了馅扣。
  • 盡量少使用標(biāo)簽結(jié)束斟赚,因?yàn)檫@會(huì)讓瀏覽器查找很多個(gè)子節(jié)點(diǎn),然后才能確定是否匹配差油,比如:.box a拗军,只要有a標(biāo)簽就會(huì)進(jìn)行查找,但是其實(shí)我們只想給.box上的a設(shè)置樣式蓄喇,我們可以給個(gè)更具體的類選擇器:.box .href发侵,這樣就能匹配更少的元素啦
  • 還有就是經(jīng)常說的避免選擇器超過三個(gè),比如 .div1 .div2 .div3 .p .a 就可以優(yōu)化為 .div1 .a妆偏,為啥這樣說的刃鳄,因?yàn)椴檎抑幸灿袟l件進(jìn)行判斷啊我們提供了一個(gè)子節(jié)點(diǎn).a,并且是在.div1下的其實(shí)就夠了钱骂,他會(huì)沿著一條線查找铲汪,知道跟節(jié)點(diǎn)熊尉,咱寫這么多選擇器只會(huì)徒增判斷條件,沒卵用掌腰。狰住。
  • 還有就是盡量寫得具體,可以使用>操作符等等
  • 選擇器上能縮寫的命名就盡量縮寫齿梁、相同父層級(jí)的選擇器合并催植,都可以適當(dāng)減少css體積。
  • 使用CSS BEM書寫規(guī)范
  • 歡迎補(bǔ)充

最后

這次分享內(nèi)容就到這了勺择,比較短小创南,哈哈。

打算做完rollup之后省核,重拾基礎(chǔ)了稿辙,畢竟一切都是從根本一點(diǎn)點(diǎn)碼起來的,只有底子厚了气忠,才能厚積薄發(fā)邻储。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旧噪,隨后出現(xiàn)的幾起案子吨娜,更是在濱河造成了極大的恐慌,老刑警劉巖淘钟,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宦赠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡米母,警方通過查閱死者的電腦和手機(jī)勾扭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铁瞒,“玉大人尺借,你說我怎么就攤上這事【猓” “怎么了燎斩?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜂绎。 經(jīng)常有香客問我栅表,道長(zhǎng),這世上最難降的妖魔是什么师枣? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任怪瓶,我火速辦了婚禮,結(jié)果婚禮上践美,老公的妹妹穿的比我還像新娘洗贰。我一直安慰自己找岖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布敛滋。 她就那樣靜靜地躺著许布,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绎晃。 梳的紋絲不亂的頭發(fā)上蜜唾,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音庶艾,去河邊找鬼袁余。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咱揍,可吹牛的內(nèi)容都是我干的颖榜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼煤裙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掩完!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起积暖,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怪与,沒想到半個(gè)月后夺刑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡分别,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年遍愿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘斩。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沼填,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出括授,到底是詐尸還是另有隱情坞笙,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布荚虚,位于F島的核電站薛夜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏版述。R本人自食惡果不足惜梯澜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渴析。 院中可真熱鬧晚伙,春花似錦吮龄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至民傻,卻和暖如春胰默,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漓踢。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工牵署, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喧半。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓奴迅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挺据。 傳聞我的和親對(duì)象是個(gè)殘疾皇子取具,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容