JS相關(guān)概念

1.CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的?

css樣式放在head中,js放置在body標(biāo)簽內(nèi)的最后,script標(biāo)簽內(nèi)。外鏈用<script src=""></script>,內(nèi)部的用<script></script>。因?yàn)閖s一般會(huì)涉及到一些DOM操作,所以要等全部的dom元素都加載完再加載js。還有一個(gè)原因是相對(duì)于頁(yè)面中的圖片或css來(lái)說(shuō)js是阻塞的,css和圖片是可以同步加載的,但是js要執(zhí)行完之后才能加載后面的內(nèi)容,如果把js放在前面可能會(huì)造成白屏的現(xiàn)象。

2.解釋白屏和FOUC

白屏

  • 如果把樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(新窗口打開(kāi),刷新等)頁(yè)面會(huì)出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn)
  • 如果使用 @import 標(biāo)簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏。
  • 因?yàn)槟_本會(huì)阻塞后面內(nèi)容的呈現(xiàn)和其后組件的下載
    -對(duì)于圖片和CSS,在加載時(shí)會(huì)并發(fā)加載(如一個(gè)域名下同時(shí)加載兩個(gè)文件)。但在加載JavaScript 時(shí),會(huì)禁用并發(fā),并且阻止其他內(nèi)容的下載。所以把JavaScript放入頁(yè)面頂部也會(huì)導(dǎo)致白屏現(xiàn)象。
    FOUC(Flash of Unstyled Content)
    對(duì)于IE瀏覽器,在某些場(chǎng)景下(點(diǎn)擊鏈接,輸入U(xiǎn)RL,使用書(shū)簽進(jìn)入等),會(huì)出現(xiàn)FOUC(Flash of Unstyled Content)無(wú)樣式內(nèi)容閃爍現(xiàn)象(逐步加載無(wú)樣式的內(nèi)容,等CSS加載后頁(yè)面突然展現(xiàn)樣式)。對(duì)于Firefox會(huì)一直表現(xiàn)出FOUC

3.async和defer的作用是什么?有什么區(qū)別

沒(méi)有 defer 或 async,瀏覽器會(huì)立即加載并執(zhí)行指定的腳本,“立即”指的是在渲染該script標(biāo)簽之下的文檔元素之前,也就是說(shuō)不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行。
有 async,加載和渲染后續(xù)文檔元素的過(guò)程將和 script.js 的加載與執(zhí)行并行進(jìn)行(異步)。
有 defer,加載后續(xù)文檔元素的過(guò)程將和 script.js 的加載并行進(jìn)行(異步),但script.js的執(zhí)行要在所有元素解析完成之后,DOMContentLoaded事件觸發(fā)之前完成。
defer腳本延遲到文檔解析和顯示后執(zhí)行,有順序
async不保證順序

4.簡(jiǎn)述網(wǎng)頁(yè)的渲染機(jī)制

1.解析HTML標(biāo)簽,構(gòu)建DOM樹(shù)。
2.解析CSS標(biāo)簽,構(gòu)建CSSOM樹(shù)。
3.把DOM和CSSOM組合成渲染樹(shù)(render tree)。
4.在渲染樹(shù)的基礎(chǔ)上進(jìn)行布局,計(jì)算每個(gè)節(jié)點(diǎn)的幾何結(jié)構(gòu)。
5.把每個(gè)節(jié)點(diǎn)繪制到屏幕上(painting)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 簡(jiǎn)單介紹JavaScript的發(fā)展歷史 JavaScript因互聯(lián)網(wǎng)而生,回顧它的歷史要從瀏覽器的歷史講起。 19...
    _Dot912閱讀 512評(píng)論 0 3
  • 1、CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? (1)CSS 對(duì)于谷歌瀏覽器和Safari放在head里或body里...
    徐國(guó)軍_plus閱讀 465評(píng)論 0 0
  • 1. CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? css放在head標(biāo)簽內(nèi),防止渲染時(shí)出現(xiàn)白屏 js放在最后body...
    billa_8f6b閱讀 588評(píng)論 0 0
  • 1.CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? css放在 標(biāo)簽中間,是為了防止白屏的出現(xiàn) js放在body標(biāo)簽內(nèi)...
    向前沖沖的蝸牛閱讀 248評(píng)論 0 1
  • CSS和JS在網(wǎng)頁(yè)中的放置順序 網(wǎng)站加載的整個(gè)完整過(guò)程:首先瀏覽器從服務(wù)器接收到html代碼,然后開(kāi)始解析html...
    Joey的企鵝閱讀 285評(píng)論 1 0