CSS和JS的放置

推薦將CSS放置于<head>標(biāo)簽中

首先,我們必須了解瀏覽器的渲染機(jī)制

webkit內(nèi)核渲染機(jī)制

如上圖趟据,以Chrome队萤、Safari等瀏覽器所用渲染內(nèi)核webkit為例油吭,我們來解釋一下瀏覽器的渲染邏輯:

1.用戶輸入U(xiǎn)RL下愈,向服務(wù)器請(qǐng)求數(shù)據(jù)
2.下載并解析HTML文件纽绍,形成DOM樹【DOM Tree】
3.下載并解析CSS文件,解析出的是樣式規(guī)則【即標(biāo)簽的顏色势似、邊框之類】
4.DOM樹和樣式規(guī)則一起構(gòu)建成attachment拌夏,在結(jié)合layout【布局】形成呈現(xiàn)樹【render tree】僧著,此時(shí)瀏覽器就可以把內(nèi)容繪制到瀏覽器上用于展示了

尤其要注意的是在第二步和第三步中,文件是一個(gè)個(gè)開始下載的障簿,無需等待DOM樹構(gòu)建完畢就可以繼續(xù)后續(xù)操作盹愚,樣式的呈現(xiàn)也是解析一行HTML代碼,看是否有css樣式規(guī)則站故,有就加載出來皆怕,沒有就繼續(xù)解析下一行HTML代碼,在《瀏覽器的工作原理:新式網(wǎng)絡(luò)瀏覽器幕后揭秘》一文中作者的描述是

這是一個(gè)漸進(jìn)的過程世蔗。為達(dá)到更好的用戶體驗(yàn)端逼,呈現(xiàn)引擎會(huì)力求盡快將內(nèi)容顯示在屏幕上。它不必等到整個(gè) HTML 文檔解析完畢之后污淋,就會(huì)開始構(gòu)建呈現(xiàn)樹【render tree】和設(shè)置布局【layout】。在不斷接收和處理來自網(wǎng)絡(luò)的其余內(nèi)容的同時(shí)余掖,呈現(xiàn)引擎會(huì)將部分內(nèi)容解析并顯示出來寸爆。

因此,若是不將css置于HTML的頂部盐欺,依照上述特性赁豆,會(huì)導(dǎo)致如下后果

1.在未解析到前端工程師寫好的css時(shí),和dom樹結(jié)合的樣式規(guī)則是瀏覽器的默認(rèn)樣式
2.在后續(xù)又解析到前端工程師寫好的css時(shí)冗美,由于產(chǎn)生樣式覆蓋魔种,頁面可能會(huì)產(chǎn)生FOUC現(xiàn)象【Flash of Unstyled Content無樣式內(nèi)容閃爍】
3.若是css處于HTML的文件底部,近乎等同于是說dom已經(jīng)構(gòu)建完畢粉洼,若是dom樹過于復(fù)雜龐大节预,用戶等待時(shí)間會(huì)過長(zhǎng),會(huì)出現(xiàn)白屏現(xiàn)象

參考文獻(xiàn)

https://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/

推薦將JS放置于<body>標(biāo)簽的底部

首先我們必須要知道JavaScript在HTML中的兩個(gè)特征
1.阻塞后面內(nèi)容的呈現(xiàn)
2.阻塞其后組件的下載

timeline

從上圖中我們可以看到一個(gè)非常有趣的現(xiàn)象属韧,每一個(gè)js文件下載之后安拟,后面都會(huì)有一段空白——code executing【代碼執(zhí)行】,因此每個(gè)js文件的阻塞時(shí)間實(shí)際上是下載時(shí)間+執(zhí)行時(shí)間宵喂。

所以糠赦,若是不將js置于<body>的底部,會(huì)導(dǎo)致如下后果

1.我們都知道的是锅棕,js文件里有很多例如document.write()拙泽、createElement等語句,這些語句會(huì)直接影響dom樹的構(gòu)建和css樣式規(guī)則的解析裸燎,若是js文件內(nèi)有大量類似于上述語句顾瞻,可能會(huì)產(chǎn)生大量bug
2.若是js文件過大,js文件下載和執(zhí)行的時(shí)間會(huì)大大增長(zhǎng)顺少,此時(shí)瀏覽器必須要等待這段時(shí)間結(jié)束才能進(jìn)行后續(xù)渲染朋其,用戶此時(shí)看到的網(wǎng)頁將是一片空白王浴,即俗稱白屏現(xiàn)象

使用defer或async解決將js置于HTML頂部產(chǎn)生的不良后果

1.async
async

作用:加載和渲染后續(xù)文檔元素的過程將和script.js 的加載與執(zhí)行并行進(jìn)行(異步),但是無法保證順序

2.defer

defer

作用:加載后續(xù)文檔元素的過程將和 script.js 的加載并行進(jìn)行(異步)梅猿,但 script.js 的執(zhí)行要在所有元素解析完成之后氓辣,DOMContentLoaded 事件觸發(fā)之前完成腳本延遲到文檔解析和顯示后執(zhí)行袱蚓,有順序钞啸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喇潘,隨后出現(xiàn)的幾起案子体斩,更是在濱河造成了極大的恐慌,老刑警劉巖颖低,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件絮吵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忱屑,警方通過查閱死者的電腦和手機(jī)蹬敲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莺戒,“玉大人伴嗡,你說我怎么就攤上這事〈硬” “怎么了瘪校?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)名段。 經(jīng)常有香客問我阱扬,道長(zhǎng),這世上最難降的妖魔是什么吉嫩? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任价认,我火速辦了婚禮,結(jié)果婚禮上自娩,老公的妹妹穿的比我還像新娘用踩。我一直安慰自己,他們只是感情好忙迁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布脐彩。 她就那樣靜靜地躺著,像睡著了一般姊扔。 火紅的嫁衣襯著肌膚如雪惠奸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天恰梢,我揣著相機(jī)與錄音佛南,去河邊找鬼梗掰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嗅回,可吹牛的內(nèi)容都是我干的及穗。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼绵载,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼埂陆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娃豹,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤焚虱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后懂版,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃栽,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年躯畴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谍咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡私股,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恩掷,到底是詐尸還是另有隱情倡鲸,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布黄娘,位于F島的核電站峭状,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逼争。R本人自食惡果不足惜优床,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誓焦。 院中可真熱鬧胆敞,春花似錦、人聲如沸杂伟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赫粥。三九已至观话,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間越平,已是汗流浹背频蛔。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工灵迫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晦溪。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓瀑粥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尼变。 傳聞我的和親對(duì)象是個(gè)殘疾皇子利凑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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