JavaScript時間線

時間線

  1. 創建Document對象,開始解析web頁面。解析HTML元素和他們的文本內容後添加Element對象和Text節點到文檔中。這個階段 document.readyState = ‘loading’ 。

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

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

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

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

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

  7. 文檔解析完成後,所有設置有defer的腳本會按照順序執行。(禁止使用document.write());

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章