JS相關(guān)概念

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

  • CSS要放頭部head中的link標(biāo)簽內(nèi)引入。如果CSS放在后面可能頁面會(huì)出現(xiàn)閃跳的感覺,或者是白屏或者布局混亂樣式很丑直到CSS加載完成。
  • js文件要放在<script></script>標(biāo)簽中,置于</body>最后 </html>之前,用于最后渲染。js是阻塞加載,會(huì)影響頁面加載的速度,如果js文件比較大,算法也比較復(fù)雜的話,影響更大。

解釋白屏和FOUC

產(chǎn)生白屏與FOUC(無樣式內(nèi)容閃爍)的根本原因是由于瀏覽器加載與顯示頁面方式不同造成的。
在不同瀏覽器對(duì)css和html的處理方式不同,一種(IE和Chrome)是等待css加載完成后,對(duì)html進(jìn)行渲染并顯示,另一種(Firefox)是先對(duì)html元素進(jìn)行展示,等css加載完成之后,再對(duì)html進(jìn)行樣式的設(shè)置;前者會(huì)造成白屏,后者則會(huì)造成FOUC。

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

  • 作用:是script標(biāo)簽的兩個(gè)屬性,腳本引用異步設(shè)置。用于在不阻塞頁面文檔解析的前提下,控制腳本的下載和執(zhí)行。
  • 區(qū)別:
    • async <script async src="script.js"></script>
      async,加載和渲染后續(xù)文檔元素的過程將和 script.js 的加載與執(zhí)行并行進(jìn)行(異步)。
    • defer <script defer src="script.js"></script>
      defer,加載后續(xù)文檔元素的過程將和 script.js 的加載并行進(jìn)行(異步),但是 script.js的執(zhí)行要在所有元素解析完成之后,DOMContentLoaded 事件觸發(fā)之前完成。

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

  1. 構(gòu)建DOM樹(DOM tree):從上到下解析HTML文檔生成DOM節(jié)點(diǎn)樹(DOM tree),也叫內(nèi)容樹(content tree);
  2. 構(gòu)建CSSOM(CSS Object Model)樹:加載解析樣式生成CSSOM樹;
  3. 執(zhí)行JavaScript:加載并執(zhí)行JavaScript代碼(包括內(nèi)聯(lián)代碼或外聯(lián)JavaScript文件);
  4. 構(gòu)建渲染樹(render tree):根據(jù)DOM樹和CSSOM樹,生成渲染樹(render tree);
    渲染樹:按順序展示在屏幕上的一系列矩形,這些矩形帶有字體,顏色和尺寸等視覺屬性。
  5. 布局(layout):根據(jù)渲染樹將節(jié)點(diǎn)樹的每一個(gè)節(jié)點(diǎn)布局在屏幕上的正確位置;
  6. 繪制(painting):遍歷渲染樹繪制所有節(jié)點(diǎn),為每一個(gè)節(jié)點(diǎn)適用對(duì)應(yīng)的樣式,這一過程是通過UI后端模塊完成;


    流程.png

    Webkit渲染引擎流程.png

參考1
參考2

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

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

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