瀏覽器渲染

CSS和JS在HTML中的位置

一般CSS放在head里用<style></style>包裹惨险,或用link標(biāo)簽引入css文件
JS因?yàn)闉g覽器渲染機(jī)制會(huì)放在底部</body> 之前胡嘿,就是在加載渲染完HTML迈套、CSS后在加載JS撰筷,不受白屏影響夏块;如果用link標(biāo)簽引入則需要defer/async讓其異步使頁(yè)面不受白屏影響

白屏和FOUC
  • 如果把樣式放在底部,對(duì)于IE瀏覽器扬舒,在某些場(chǎng)景下(新窗口打開,刷新等)頁(yè)面會(huì)出現(xiàn)白屏凫佛,而不是內(nèi)容逐步展現(xiàn)讲坎;如果用 @import 標(biāo)簽,即使CSS放入link愧薛,并且放在頭部晨炕,也可能出現(xiàn)白屏
    白屏是因?yàn)闉g覽器的渲染機(jī)制,瀏覽器渲染的時(shí)候請(qǐng)求時(shí)間過長(zhǎng)導(dǎo)致白屏毫炉,chrome的渲染流程:html > Dom > css > Cssom > Render Tree > Layout > Painting,可以看出是最后才會(huì)layout然后再painting瓮栗,所以瀏覽器頁(yè)面在css加載渲染完了以后才會(huì)有內(nèi)容顯示,如果瀏覽一些國(guó)外的網(wǎng)站瞄勾,網(wǎng)站被墻费奸,瀏覽器會(huì)一直顯示loding而沒有頁(yè)面顯示,就是因?yàn)榫W(wǎng)頁(yè)響應(yīng)時(shí)間過長(zhǎng)導(dǎo)致白屏进陡;當(dāng)使用@import()時(shí)愿阐,屬性可能導(dǎo)致瀏覽器渲染不及時(shí),又或者我們把標(biāo)簽放在了body的底部位置趾疚,都可能導(dǎo)致不及時(shí)的現(xiàn)象缨历。所以一般用link標(biāo)簽把css樣式文件引入并放置在head里
  • FOUC(Flash Of Unstyled Content)無(wú)樣式內(nèi)容閃爍:如果把樣式放在底部,對(duì)于IE瀏覽器在某些場(chǎng)景下(點(diǎn)擊鏈接糙麦,輸入U(xiǎn)RL辛孵,使用書簽進(jìn)入等)會(huì)出現(xiàn)ROUC現(xiàn)象(逐步加載無(wú)樣式的內(nèi)容,等CSS加載后頁(yè)面突然展現(xiàn)樣式)對(duì)于Firefox會(huì)一直表現(xiàn)出FOUC
    FireFox的渲染邏輯和Chrome的不太一樣赡磅,一開始Chrome是等待渲染樹和位置計(jì)算好才會(huì)出來網(wǎng)頁(yè)的內(nèi)容魄缚,但到了FireFox每加載一次dom樹就會(huì)重繪一次網(wǎng)頁(yè)樣式,一直到所有內(nèi)容完成為止仆邓,所以一般我們用link把css放在header內(nèi)
async和defer

js對(duì)頁(yè)面加載和渲染有兩個(gè)影響:阻塞后面內(nèi)容的呈現(xiàn)和阻塞其后組件的下載鲜滩,是因?yàn)闉g覽器的渲染機(jī)制:對(duì)于圖片和css伴鳖,在加載時(shí)會(huì)并發(fā)加載(如一個(gè)域名下同時(shí)加載兩個(gè)文件)但在加載JavaScript時(shí)會(huì)禁用并發(fā),并阻止其它內(nèi)容的下載徙硅。所以把JavaScript放入頁(yè)面頂部也會(huì)導(dǎo)致白屏現(xiàn)象
當(dāng)用link標(biāo)簽在head里引入.js文件則需要用async和defer來異步
async:加載渲染后續(xù)文檔元素的過程和.js文件的加載和執(zhí)行并行進(jìn)行(異步)榜聂,不保證順序
defer:加載渲染后續(xù)文檔元素的過程和.js文件的加載和執(zhí)行并行進(jìn)行(異步),但.js文件執(zhí)行需要在所有元素解析完之后嗓蘑,DOMContentLoaded事件觸發(fā)之前完成须肆。

網(wǎng)頁(yè)渲染機(jī)制
  • 解析HTML標(biāo)簽,構(gòu)建DOM樹
  • 解析CSS標(biāo)簽桩皿,構(gòu)建CSSOM樹
  • 把DOM和CSSOM合成Render樹
  • 內(nèi)測(cè)測(cè)算數(shù)據(jù)并將頁(yè)面Layout
  • 繪制頁(yè)面Painting

具體流程:
瀏覽器通過url獲得html文件后會(huì)從上到下加載并進(jìn)行解析和渲染豌汇。當(dāng)遇到外部css文件或圖片則發(fā)送請(qǐng)求此過程同時(shí)進(jìn)行(異步)。因?yàn)閖s文件有可能要修改DOM所以HTML的加載渲染會(huì)在js文件解析完成后泄隔,因此當(dāng)遇到j(luò)s文件時(shí)HTML會(huì)掛起渲染的線程等js記載完成后繼續(xù)html的加載渲染(白屏原因)拒贱。HTML的渲染過程是將代碼按照深度優(yōu)先遍歷生成DOM tree,CSS加載渲染完后生成CSSOM tree佛嬉,DOM和CSSOM合成Render tree逻澳,然后瀏覽器開始Layout最后Painting


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市暖呕,隨后出現(xiàn)的幾起案子斜做,更是在濱河造成了極大的恐慌,老刑警劉巖湾揽,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤逼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡库物,警方通過查閱死者的電腦和手機(jī)霸旗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艳狐,“玉大人定硝,你說我怎么就攤上這事『聊浚” “怎么了蔬啡?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)镀虐。 經(jīng)常有香客問我箱蟆,道長(zhǎng),這世上最難降的妖魔是什么刮便? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任空猜,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辈毯。我一直安慰自己坝疼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布谆沃。 她就那樣靜靜地躺著钝凶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唁影。 梳的紋絲不亂的頭發(fā)上耕陷,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音据沈,去河邊找鬼哟沫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锌介,可吹牛的內(nèi)容都是我干的嗜诀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼孔祸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼裹虫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起融击,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雳窟,沒想到半個(gè)月后尊浪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡封救,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年拇涤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉结。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹅士,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惩坑,到底是詐尸還是另有隱情掉盅,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布以舒,位于F島的核電站趾痘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔓钟。R本人自食惡果不足惜永票,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侣集,春花似錦键俱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至罚攀,卻和暖如春党觅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斋泄。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工杯瞻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炫掐。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓魁莉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親募胃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旗唁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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