初識(shí)JAVASCRIPT

瀏覽器是如何渲染網(wǎng)頁(yè)的挎扰?

 在學(xué)習(xí)Javascript之前拔恰,我們先要看看瀏覽器如何渲染HTML的文件的或南?首先瀏覽器先通過(guò)網(wǎng)絡(luò)層繁仁,從服務(wù)器端下載html文件掰曾,然后瀏覽器通過(guò)正則進(jìn)行匹配术裸,進(jìn)行語(yǔ)義分析倘是,然后構(gòu)建DOM樹(shù)。接下來(lái)加載資源也就是加載CSS和JS袭艺。
 瀏覽器加載CSS的時(shí)候搀崭,有兩種方式:
   1.  先把所有的CSS資源加載完成,然后繪制CSSOM樹(shù)。
   2.  先按照瀏覽器默認(rèn)的樣式進(jìn)行繪制瘤睹,遇到CSS資源中的樣式升敲,再加載資源樣式。也就是說(shuō)是邊繪制邊加載轰传。

這個(gè)時(shí)候我們就涉及到了CSS的放置方式的問(wèn)題驴党,因?yàn)镃SS的放置前后順序會(huì)引起白屏FOUC的問(wèn)題。

白屏問(wèn)題
如果把樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(新窗口打開(kāi),刷新等)頁(yè)面會(huì)出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn),如果使用 @import標(biāo)簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏.

FOUC (Flash of Unstyled Content) 無(wú)樣式內(nèi)容閃爍
如果把樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(點(diǎn)擊鏈接,輸入U(xiǎn)RL,使用書(shū)簽進(jìn)入等),會(huì)出現(xiàn) FOUC 現(xiàn)象(逐步加載無(wú)樣式的內(nèi)容,等CSS加載后頁(yè)面突然展現(xiàn)樣式).對(duì)于 Firefox 會(huì)一直表現(xiàn)出 FOUC .

所以获茬,為了不引起上述的問(wèn)題港庄。我們一般將CSS文件放入head標(biāo)簽內(nèi)。

我們說(shuō)完了如何在HTML中放置CSS的問(wèn)題恕曲,那接下來(lái)還要說(shuō)說(shuō)JS的放置問(wèn)題攘轩。因?yàn)榧虞dCSS屬于加載外部資源,很顯然码俩,JS也屬于外部資源度帮,我們不可能將JS全部寫(xiě)入script標(biāo)簽中。(如果JS需要很大的話)稿存。

其實(shí)我們知道瀏覽器加載JS的時(shí)候笨篷,不會(huì)像加載CSS的時(shí)候可以一次并發(fā)加載2個(gè)或者4個(gè)文件。瀏覽器會(huì)立即加載并執(zhí)行指定的腳本瓣履,“立即”指的是在渲染該 script 標(biāo)簽之下的文檔元素之前率翅,也就是說(shuō)不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行袖迎。這時(shí)候如果script標(biāo)簽還有其他元素冕臭,那么瀏覽器就會(huì)解析不到,會(huì)引起白屏現(xiàn)象燕锥。

腳本會(huì)阻塞后面內(nèi)容的呈現(xiàn)
腳本會(huì)阻塞其后組件的下載

和CSS文件的放置正好相反辜贵,JS一定要放到HTML文件的末尾,也就是body文件的最后归形。(雖然script標(biāo)簽可以放置HTML文件的任何地方托慨,但是我們不建議這么做。)

當(dāng)然你如果非要將JS放置在頭部中暇榴,說(shuō)這樣比較美觀厚棵。那么如何放置白屏的問(wèn)題出現(xiàn),我們可以引用兩個(gè)關(guān)鍵字放入script標(biāo)簽中蔼紧。這兩個(gè)關(guān)鍵字是 defter 婆硬、async

<script async src="script.js"></script>

有 async奸例,加載和渲染后續(xù)文檔元素的過(guò)程將和 script.js 的加載與執(zhí)行并行進(jìn)行(異步)彬犯。

<script defer src="script.js"></script>

有 defer,加載后續(xù)文檔元素的過(guò)程將和 script.js 的加載并行進(jìn)行(異步),但 script.js 的執(zhí)行要在所有元素解析完成之后躏嚎,DOMContentLoaded 事件觸發(fā)之前完成蜜自。

defer:腳本延遲到文檔解析和顯示后執(zhí)行,有順序
async:不保證順序

這樣瀏覽器加載完了外部資源后卢佣,就會(huì)將DOM樹(shù)和CSS樹(shù)組合構(gòu)建成渲染樹(shù)重荠,渲染樹(shù)的基礎(chǔ)上進(jìn)行布局,計(jì)算每個(gè)節(jié)點(diǎn)的幾何結(jié)構(gòu)虚茶,把每個(gè)節(jié)點(diǎn)繪制到屏幕上戈鲁。

這樣就完成了瀏覽器渲染HTML文件的整個(gè)過(guò)程。當(dāng)然你如果覺(jué)得我講的比較籠統(tǒng)的話嘹叫,可以參考[How browsers work]婆殿。

以上內(nèi)容參考饑人谷課件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罩扇,隨后出現(xiàn)的幾起案子婆芦,更是在濱河造成了極大的恐慌,老刑警劉巖喂饥,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消约,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡员帮,警方通過(guò)查閱死者的電腦和手機(jī)或粮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捞高,“玉大人氯材,你說(shuō)我怎么就攤上這事∠醺冢” “怎么了氢哮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辈讶。 經(jīng)常有香客問(wèn)我命浴,道長(zhǎng),這世上最難降的妖魔是什么贱除? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮媳溺,結(jié)果婚禮上月幌,老公的妹妹穿的比我還像新娘。我一直安慰自己悬蔽,他們只是感情好扯躺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般录语。 火紅的嫁衣襯著肌膚如雪倍啥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天澎埠,我揣著相機(jī)與錄音虽缕,去河邊找鬼。 笑死蒲稳,一個(gè)胖子當(dāng)著我的面吹牛氮趋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播江耀,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼剩胁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了祥国?” 一聲冷哼從身側(cè)響起昵观,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舌稀,沒(méi)想到半個(gè)月后啊犬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扩借,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年椒惨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮罪。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡康谆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫉到,到底是詐尸還是另有隱情沃暗,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布何恶,位于F島的核電站孽锥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏细层。R本人自食惡果不足惜惜辑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疫赎。 院中可真熱鬧盛撑,春花似錦、人聲如沸捧搞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至介粘,卻和暖如春殖氏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姻采。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工雅采, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偎谁。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓总滩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親巡雨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闰渔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 網(wǎng)頁(yè)一般由三個(gè)部分構(gòu)成,HTML ,CSS铐望,JAVASCRIPT冈涧。其中HTML負(fù)責(zé)網(wǎng)頁(yè)的整體結(jié)構(gòu),CSS負(fù)責(zé)網(wǎng)頁(yè)的...
    尾巴尾巴尾巴閱讀 171評(píng)論 0 0
  • 簡(jiǎn)單介紹 JavaScript的發(fā)展歷史 1990年底正蛙,歐洲核能研究組織(CERN)科學(xué)家Tim Berners-...
    飄飄流浪者閱讀 241評(píng)論 0 0
  • 1督弓、CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? 瀏覽器對(duì)于HTML的解析是自上而下逐行解析的乒验,JS下載時(shí)會(huì)阻塞下面內(nèi)...
    字母31閱讀 159評(píng)論 0 0
  • CSS 和 JavaScript 在網(wǎng)頁(yè)中的放置順序是怎樣的 CSS 一般放在 HTML 文檔的 元素里面愚隧,由...
    水劍承王閱讀 292評(píng)論 0 0
  • JavaScript的發(fā)展歷史 JavaScript因?yàn)榛ヂ?lián)網(wǎng)而生,緊隨著瀏覽器的出現(xiàn)而問(wèn)世锻全。1994年12月狂塘,N...
    饑人谷_深色晨霧閱讀 338評(píng)論 0 0