1 CSS和JS在網(wǎng)頁中的放置順序是怎樣的少孝?
css樣式放在head中。js放置在body標(biāo)簽內(nèi)的最后
2 解釋白屏和FOUC
一個是沒準(zhǔn)備好前啥都不出來等會一起出來熬苍,一個是先出來html稍走,等一會兒才出來css樣式,所以白屏是無法避免的,無論放到哪兒都會一起出來柴底,而無樣式閃爍是可以避免的
下面感覺沒用婿脸,不用看了
白屏:(1)我門使用@import(),屬性的時候也可能導(dǎo)致瀏覽器渲染不及時,(2)又或者我們把標(biāo)簽放在了body的底部位置柄驻,都可能導(dǎo)致不及時的現(xiàn)象.(3)因?yàn)槟_本會阻塞后面內(nèi)容的呈現(xiàn)和其后組件的下載
FOUC其實(shí)是(1)FireFox的渲染邏輯和Chrome的不太一樣狐树,一開始Chrome是等待渲染樹和位置計(jì)算好才會出來網(wǎng)頁的內(nèi)容,但到了FireFox每加載一次dom樹就會重繪一次網(wǎng)頁樣式鸿脓,一直到所有內(nèi)容完成為止抑钟,所以會一直出現(xiàn)
(2)把樣式放在底部,對于IE瀏覽器,在某些場景下(點(diǎn)擊鏈接,輸入U(xiǎn)RL,使用書簽進(jìn)入等),會出現(xiàn)FOUC現(xiàn)象
3 async和defer的作用是什么?有什么區(qū)別
沒有async和defer野哭,瀏覽器會立即加載并執(zhí)行js代碼在塔,不會等文檔元素加載完
- 有 async,加載和渲染后續(xù)文檔元素的過程將和 script.js 的加載與執(zhí)行并行進(jìn)行(異步).
- 有 defer拨黔,如果給script標(biāo)簽添加了defer屬性蛔溃,即使js放在head里面,它也會在HTML頁面解析完畢之后再執(zhí)行篱蝇,也就是類似于把這個js放在了頁面底部贺待。簡單來說就是等頁面的html和css加載完畢之后再加載js
4簡述網(wǎng)頁的渲染機(jī)制
①解析HTML標(biāo)簽, 構(gòu)建DOM樹
②解析CSS標(biāo)簽, 構(gòu)建CSSOM樹
③把DOM和CSSOM組合成 渲染樹(render tree)
④在渲染樹的基礎(chǔ)上進(jìn)行布局, 計(jì)算每個節(jié)點(diǎn)的幾何結(jié)構(gòu)
⑤把每個節(jié)點(diǎn)繪制到屏幕上(painting)