js 同步載入,非同步載入和載入時間線

2021-10-03 18:09:50 字數 1586 閱讀 5845

常預設的是同步載入

同步模式又稱阻塞模式,會阻止瀏覽器的後續操作,相當於阻止了後續的檔案的解析,執行等。

載入到js檔案會等候js檔案載入完成, html css載入線被阻斷

瀏覽器之所以會採用同步模式,是因為載入的js檔案中有對dom的操作 重定向,輸出document等預設行為,所以同步才是最好的。可以有效防止重繪。通常載入js檔案或者放

1. defer ie專用(ie9以下)

當瀏覽器解析到script指令碼,有defer時 瀏覽器建立執行緒載入 並繼續解析文件。

2. async w3c的標準

當瀏覽器解析到script指令碼,有async 時 瀏覽器建立執行緒載入 並繼續解析文件。載入完就執行,只能載入外部指令碼

這個是 es7 中的特性,async顧名思義是「非同步」的意思,async用於宣告乙個函式是非同步的

async和defer的相同點和不點

相同點:非同步載入檔案

不同點:

async:雖然是非同步載入,但當有多個指令碼非同步載入的時候,不一定先載入哪乙個,載入順序不一定

defer:載入順序由第乙個延遲指令碼到最後乙個延遲指令碼

3 .建立乙個script標籤,插入到dom中,載入完畢後callback 相容性最好的

function loadscript(url,callback) 

}}else

}script.src=url;

}

1.建立document物件,開始解析web頁面。解析html元素和他們的文字內容後新增element物件和text節點到文件中。這個階段 document.readystate = 『loading』 。loading (載入)

2.遇到link外部css,建立執行緒載入,並繼續解析文件。

3.遇到script外部js,並且沒有設定async、defer,瀏覽器載入,並阻塞html,css,等待js載入完成並執行該指令碼,然後繼續解析文件( html css)。

4.遇到script外部js,並且設定有async、defer,瀏覽器建立執行緒載入,並繼續解析文件。 對於async屬性的指令碼,指令碼載入完成後立即執行。(禁止使用document.write() 因為有可能會清空dom樹)

5.遇到img等,先正常解析dom結構,然後瀏覽器非同步載入src,並繼續解析文件。此時dom樹上有img標籤但是沒有載入src

6.當文件解析完成,document.readystate = 『interactive』 。 interactive (互動的)

7.文件解析完成後,所有設定有defer的指令碼會按照順序執行。(禁止使用document.write());

8.document物件觸發domcontentloaded事件,這也標誌著程式執行從同步指令碼執行階段,轉化為事件驅動階段(瀏覽器正常發揮功能)。

9.當所有async的指令碼載入完成並執行後、img等載入完成後,document.readystate = 『complete』,(complete 完成)window物件觸發load事件。

10.從此,以非同步響應方式處理使用者輸入、網路事件等。

非同步載入和載入時間線

一 非同步載入 非同步載入又叫非阻塞,瀏覽器在載入執行 js 同時,還會繼續進行後續頁面的處理。非同步載入js,按需載入,用到的時候再載入,不用到不載入。非同步載入的三種方式 1.defer屬性 在文件完成解析完成開始執行,並且在domcontentloaded事件之前執行完成。僅支援ie,最好是外...

同步載入 非同步載入 延遲載入

一 同步載入 平常預設用的都是同步載入。如 同步模式又稱阻塞模式,會阻止瀏覽器的後續處理,停止了後續的檔案的解析,執行,如影象的渲染。流覽器之所以會採用同步模式,是因為載入的js檔案中有對dom的操作,重定向,輸出document等預設行為,所以同步才是最安全的。通常會把要載入的js放到body結束...

同步載入 非同步載入 延遲載入和預載入

3 延遲載入 4 預載入 常預設的是同步載入 src script 同步模式又稱阻塞模式,會阻止瀏覽器的後續操作,相當於阻止了後續的檔案的解析,執行等。流覽器之所以會採用同步模式,是因為載入的js檔案中有對dom的操作,重定向,輸出document等預設行為,所以同步才是最安全的。通常載入js檔案或...