script標籤中的async和defer

Claire_ljy發表於2020-04-04

  在程式中程式碼是一行一行執行的,html標籤都是由渲染引擎來執行,程式碼執行時從上往下一行一行執行,當執行到alert(如下圖),alert會阻塞後面程式碼的執行,當點選完確定之後,程式碼繼續往下執行。

  javascript的內容同樣可在外部進行引用,如下圖所示,正常情況下執行結果和上面的內容相同,但當我們給html的script標籤中加入async或者defer屬性時,程式碼的執行過程也將會隨之改變。

  async 為非同步,顧名思義就是多個人同時做多件事,這裡區分sync,sync為同步,就是一個人有序的做多件事情。因此在script標籤中加入async屬性後,程式執行時,外部引用的js檔案內容和html中的程式碼同時進行。在這裡需要注意,因為程式碼的執行速度不同,顯示的效果有可能不同,在此是js內容被下載完成後立即執行。

  defer也會非同步的下載去執行js內容,當然script標籤中不會有兩個相同功能的屬性,它和async的區別是什麼呢?defer和async的區別就是defer下載完js的內容後不會立即執行,直到html文件載入解析完成後才執行,下圖就是使用defer的過程,程式碼雖然簡單,但是這樣可以清晰的表達defer的作用。

總結:前端專案中肯定少不了多多少少的js檔案,defer和async就給我們在程式執行過程中提供了很方便的引用,更方便我們維護程式碼,避免程式碼中這一個那一個的js引用。

轉載於:https://www.cnblogs.com/Codegenius/p/5835635.html

相關文章