js加載時間線

js加載時間線

如果對async和defer不瞭解的,請參考另一篇博文《異步加載js文件

  • 1、創建document對象,開始解析web頁面,解析html元素和他們的文本內容後添加element對象和text節點到文檔中,階段document.readyState = ‘loading’.

  • 2、遇到link外部css,創建線程加載,並繼續解析文檔。

  • 3、遇到script外部js,並且沒有設置async、defer,瀏覽器加載,並阻塞,等待js加載完成並執行該腳本,然後繼續解析文檔。

  • 4、遇到script外部js,並且設置有async、defer,瀏覽器創建線程加載,並繼續解析文檔。 對於async屬性的腳本,腳本加載完成後立即執行。(異步嚴禁使用documnet.write())。

  • 5、遇到img等,先正常解析dom結構,然後瀏覽器異步加載src,並繼續解析文檔。

  • 6、當文檔解析完成,document.readyState = ‘interactive’。

  • 7、文檔解析完成後,所有設置有defer的腳本會按照順序執行。(注意與async的不同,但同樣禁止使用document.write())。

  • 8、document對象觸發DOMContentLoaded事件,這也標誌着程序執行從同步腳本執行階段,轉化爲事件驅動階段。

  • 9、當所有async的腳本加載完成並執行後,img等加載完成後,documnet.readState = ‘complete’, window對象觸發load事件。

  • 10、從此,以異步響應方式處理用戶輸入、網絡事件等。

發佈了32 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章