JavaScript 的 defer 與 async

来源:http://www.cnblogs.com/chnhyg/archive/2016/09/24/5904011.html
-Advertisement-
Play Games

當解析器遇到 script 標簽時,文檔的解析將停止,並立即下載並執行腳本,腳本執行完畢後將繼續解析文檔。但是我們可以將腳本標記為 defer,這樣就不會停止文檔解析,等到文檔解析完成才執行腳本,也可以將腳本標記為 async,以便由其他線程對腳本進行解析和執行。 <! more 三者之間的區別? ...


當解析器遇到 script 標簽時,文檔的解析將停止,並立即下載並執行腳本,腳本執行完畢後將繼續解析文檔。但是我們可以將腳本標記為 defer,這樣就不會停止文檔解析,等到文檔解析完成才執行腳本,也可以將腳本標記為 async,以便由其他線程對腳本進行解析和執行。

三者之間的區別?

script

當解析器遇到 script 標簽時,文檔的解析將停止,並立即下載並執行腳本,腳本執行完畢後將繼續解析文檔。

defer script

當解析器遇到 script 標簽時,文檔的解析不會停止,其他線程將下載腳本,待到文檔解析完成,腳本才會執行。

async script

當解析器遇到 script 標簽時,文檔的解析不會停止,其他線程將下載腳本,腳本下載完成後開始執行腳本,腳本執行的過程中文檔將停止解析,直到腳本執行完畢。

圖片

什麼情況下使用 defer 和 async?

  1. 如果腳本不依賴於任何腳本,並不被任何腳本依賴,那麼則使用 defer。
  2. 如果腳本是模塊化的,不依賴於任何腳本,那麼則使用 async。

需要註意的地方

  1. async 對於內聯腳本沒有作用。
  2. defer 不應該在內聯腳本上使用。從 Gecko 1.9.2 開始,內聯腳本的 defer 會被忽略,但是在 Gecko 1.9.1 中,如果定義了 defer 屬性,即使內聯腳本也會被延遲執行。
  3. defer 的腳本是按照聲明順序執行的。而 async 的腳本不同,只要腳本下載完成,將會立即執行,未必會按照聲明順序執行。
  4. IE9 及以下版本的瀏覽器,defer 的腳本也未必會按照聲明順序執行。
  5. 如果同時使用 defer 和 async,則會預設使用 async,忽略 defer。

參考鏈接

https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/script


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、簡單工廠模式如圖 代碼: 缺點:簡單工廠模式需要客戶端認識兩個類,Cash和CashFactory 優點:子類的實例化被工廠封裝了起來,客戶端看不到 2、策略模式如圖 代碼: 缺點:客戶端(測試端)完全暴露了實現的子類 優點:策略模式的優點是簡化了單元測試,因為每一個演算法都有自己的類,可以通過自 ...
  • Ajax及其工作原理 AJAX 是一種與伺服器交換數據無需刷新網頁的技術,最早由Google公司在谷歌地圖裡使用,並迅速風靡。 AJAX是不能跨域的,如需跨域,可以使用document.domain='a.com';或者使用伺服器代理,代理XMLHttpRequest文件 AJAX是基於現有的Int ...
  • 首先是apply()一個很強大的功能——能將一個數組預設轉化為參數列表!!! 應用: 1.求出一個數組中的最大值 Math.max()方法接受多個參數,但是不接受數組,所以直接Math.max(arr)是無法達到效果的,由apply()將數組轉化成參數列表進行操作。 2.合併數組 ①使用concat ...
  • 最近angular2正式版發佈了,現在就趁熱接著記錄一下2.0版的Hello World。據說由RC6升級到2.0代碼改動不是很大,在寫的時候也感覺改動不是很大,這次記錄還是以asp.net core 空項目模板為基礎,本著在此基礎上添加最少的代碼來實現Hello World,沒用的代碼全部清掉(用 ...
  • 百度地圖API 百度地圖API當然在官方文檔學習更加清晰,我只是做一下我這2天研究一個總結。 首先,應該在上面的鏈接申請一個你的密鑰。 接著,顯示百度地圖,先上代碼再解釋: 創建地圖實例 這裡通過new 創建一個地圖實例,其中參數可以是id也可以是元素對象,用於在頁面上展現地圖,所以給html元素設 ...
  • ES5概述(ECMAScript262/5.1) 本文參考: "ES5概述" ECMAScript 是基於對象的: 基本語言和宿主設施都由對象提供,ECMAScript 程式是一組可通信的對象。ECMAScript 對象是屬性的集合,每個屬性有零個或多個 特性,以及屬性的使用方式。例如,當設置一個屬 ...
  • 今天使用webpack-sample初始一個vue-cli項目,在app.vue文件中添加了個鉤子函數ready,可是ready內的事件一直不執行,檢查了webpack文件和package.json也沒發現什麼問題,瀏覽器也沒報錯或者提示,很令人捉急。然後去github看了webpack-simpl ...
  • 在命名規則上,構造函數一般是首字母大寫,普通函數遵照小駝峰式命名法。 在函數調用的時候: function fn() { } 構造函數:1. new fn( ) 2 .構造函數內部會創建一個新的對象,即f的實例 3. 函數內部的this指向 新創建的f的實例 4. 預設的返回值是f的實例 普通函數: ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...