js之script屬性async與defer


 

概念

默認情況下js的腳本執行是同步和阻塞的,但是 <script> 標簽有 defer 和 async 屬性, 這可以改變腳本的執行方式,這些都是布爾類型了,沒有值,只需要出現在 <script> 標簽里即可。

如:

 

還要注意一點,html5說這些屬性只在和src屬性聯合使用時才有效

如果同時指定了兩個屬性,則會遵從async屬性而忽略defer屬性。

 

作用

defer 屬性標注的腳本是延遲腳本,使得瀏覽器延遲腳本的執行,也就是說,腳本會被異步下載但是不會被執行,直到文檔的載入和解析完成,並可以操作,腳本才會被執行。

async 屬性標注的腳本是異步腳本,即異步下載腳本時,不會阻塞文檔解析,但是一旦下載完成后,立即執行,阻塞文檔解析。

區別

延遲腳本會按他們在文檔里的出現順序執行

異步腳本在它們載入后執行,但是不能保證執行順序

 

一張圖足以說明區別:

 

使用async的意義就在於使得下載腳本時,不會阻塞文檔的解析。因為async的腳本執行順序是沒有保證的,因此要確認腳本間沒有依賴關系

現在呢基本上都是在文檔的最后寫腳本,那么這和 defer 的區別在哪里呢?

第一點當然是異步下載腳本了,第二點就是 使用async或defer任何一個都意味着在腳本里不能出現 document.write

 

參考

 

http://peter.sh/experiments/asynchronous-and-deferred-javascript-execution-explained/

http://css-tricks.com/async-attribute-scripts-bottom/

<<JavaScript 權威指南>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM