20170329(JS相關(guān)概念)

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

CSS放置在<head>中;
JS不嚴格的來說放在那里都可以,但是如果在HTML和CSS沒有讀取完畢的情況插入JS,有可能出現(xiàn)白屏現(xiàn)象,所以最好放置在HTML和CSS之后。

解釋白屏和FOUC

如果把樣式放在底部,對于IE瀏覽器,在某些場景下(新窗口打開,刷新等)頁面會出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn),如果使用 @import 標簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏。
如果使用import方法對CSS進行導(dǎo)入,會導(dǎo)致某些頁面在Windows 下的Internet Explorer出現(xiàn)一些奇怪的現(xiàn)象:以無樣式顯示頁面內(nèi)容的瞬間閃爍,這種現(xiàn)象稱之為文檔樣式短暫失效(Flash of Unstyled Content),簡稱為FOUC。

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

1.<script src="example.js"></script>

沒有defer或async屬性,瀏覽器會立即加載并執(zhí)行相應(yīng)的腳本。也就是說在渲染script標簽之后的文檔之前,不等待后續(xù)加載的文檔元素,讀到就開始加載和執(zhí)行,此舉會阻塞后續(xù)文檔的加載;
2.<script async src="example.js"></script>

有了async屬性,表示后續(xù)文檔的加載和渲染與js腳本的加載和執(zhí)行是并行進行的,即異步執(zhí)行;
3.<script defer src="example.js"></script>

有了defer屬性,加載后續(xù)文檔的過程和js腳本的加載(此時僅加載不執(zhí)行)是并行進行的(異步),js腳本的執(zhí)行需要等到文檔所有元素解析完成之后,DOMContentLoaded事件觸發(fā)執(zhí)行之前。

下圖可以直觀的看出三者之間的區(qū)別:



*其中藍色代表js腳本網(wǎng)絡(luò)加載時間,紅色代表js腳本執(zhí)行時間,綠色代表html解析。

從圖中我們可以明確一下幾點:

1.defer和async在網(wǎng)絡(luò)加載過程是一致的,都是異步執(zhí)行的;

2.兩者的區(qū)別在于腳本加載完成之后何時執(zhí)行,可以看出defer更符合大多數(shù)場景對應(yīng)用腳本加載和執(zhí)行的要求;

3.如果存在多個有defer屬性的腳本,那么它們是按照加載順序執(zhí)行腳本的;而對于async,它的加載和執(zhí)行是緊緊挨著的,無論聲明順序如何,只要加載完成就立刻執(zhí)行,它對于應(yīng)用腳本用處不大,因為它完全不考慮依賴。

簡述網(wǎng)頁的渲染機制

1.由從服務(wù)器接收到的 HTML 形成 DOM(文檔對象模型)。
2.樣式被加載和解析,形成 CSSOM(CSS 對象模型)。
3.緊接著 DOM 和 CSSOM 創(chuàng)建了一個渲染樹,這個渲染樹是一些被渲染對象的集合( Webkit 分別叫它們”renderer”和”render object”,而在Gecko 引擎中叫”frame”)。除了不可見的元素(比如 head 標簽和一些有 display:none 屬性的元素),渲染樹映射了 DOM 的結(jié)構(gòu)。在渲染樹中,每一個文本字符串都被當做一個獨立的 renderer。每個渲染對象都包含了與之對應(yīng)的計算過樣式的DOM 對象(或者一個文本塊)。換句話說,渲染樹描述了 DOM 的直觀的表現(xiàn)形式。
4.對每個渲染元素來說,它的坐標是經(jīng)過計算的,這被叫做“布局(layout)”。瀏覽器使用一種只需要一次處理的“流方法”來布局所有元素(tables需要多次處理)。
5.最后,將布局顯示在瀏覽器窗口中,這個過程叫做“繪制(painting)”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. CSS和JS在網(wǎng)頁中的放置順序是怎樣的? css放在head標簽內(nèi),防止渲染時出現(xiàn)白屏 js放在最后body...
    billa_8f6b閱讀 634評論 0 0
  • 簡單介紹JavaScript的發(fā)展歷史 JavaScript因互聯(lián)網(wǎng)而生,回顧它的歷史要從瀏覽器的歷史講起。 19...
    _Dot912閱讀 608評論 0 3
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 14,143評論 1 92
  • 1,CSS和JS在網(wǎng)頁中的放置順序是怎樣的? 網(wǎng)站加載的整個完整過程是:1、首先瀏覽器從服務(wù)器接收到html代碼,...
    進擊的前端_風(fēng)笑影閱讀 341評論 0 0
  • 1. CSS和JS在網(wǎng)頁中的放置順序是怎樣的? CSS最好放入header中,即放在網(wǎng)頁內(nèi)容(html標簽中包含的...
    熊蛋子17閱讀 541評論 0 0

友情鏈接更多精彩內(nèi)容