1. 程式人生 > >defer和async的區別

defer和async的區別

先來試個一句話解釋仨,當瀏覽器碰到 script 指令碼的時候:

  1. <script src="script.js"></script>

    沒有 defer 或 async,瀏覽器會立即載入並執行指定的指令碼,“立即”指的是在渲染該 script 標籤之下的文件元素之前,也就是說不等待後續載入的文件元素,讀到就載入並執行。

  2. <script async src="script.js"></script>

    有 async,載入和渲染後續文件元素的過程將和 script.js 的載入與執行並行進行(非同步)。

  3. <script defer src="myscript.js"></script>

    有 defer,載入後續文件元素的過程將和 script.js 的載入並行進行(非同步),但是 script.js 的執行要在所有元素解析完成之後,DOMContentLoaded 事件觸發之前完成。

然後從實用角度來說呢,首先把所有指令碼都丟到 </body> 之前是最佳實踐,因為對於舊瀏覽器來說這是唯一的優化選擇,此法可保證非指令碼的其他一切元素能夠以最快的速度得到載入和解析。

接著,我們來看一張圖咯:

請輸入圖片描述

藍色線代表網路讀取,紅色線代表執行時間,這倆都是針對指令碼的;綠色線代表 HTML 解析。

此圖告訴我們以下幾個要點:

  1. defer 和 async 在網路讀取(下載)這塊兒是一樣的,都是非同步的(相較於 HTML 解析)
  2. 它倆的差別在於指令碼下載完之後何時執行,顯然 defer 是最接近我們對於應用指令碼載入和執行的要求的
  3. 關於 defer,此圖未盡之處在於它是按照載入順序執行指令碼的,這一點要善加利用
  4. async 則是一個亂序執行的主,反正對它來說指令碼的載入和執行是緊緊挨著的,所以不管你宣告的順序如何,只要它載入完了就會立刻執行
  5. 仔細想想,async 對於應用指令碼的用處不大,因為它完全不考慮依賴(哪怕是最低階的順序執行),不過它對於那些可以不依賴任何指令碼或不被任何指令碼依賴的指令碼來說卻是非常合適的,最典型的例子:Google Analytics

相關推薦

腳本引用中使用deferasync用法區別

兩個 不依賴 doc 體驗 html 中文 htm 停止 其他 是的,就是在頁面腳本引用的時候設置defer或者async,為什麽會有這兩個屬相來輔助腳本加載那,因為瀏覽器在遇到script標簽的時候,文檔的解析會停止,不再構建document,有時打開一個網頁上會出現空

script標簽中deferasync屬性的區別

插入 asc sync 過程 並行 事件 需要 -1 事件觸發   向html頁面中插入javascript代碼的主要方法就是通過script標簽。其中包括兩種形式,第一種直接在script標簽之間插入js代碼,第二種即是通過src屬性引入外部js文件。由於解釋器在解析執行

script標籤中deferasync屬性的區別

script標籤存在兩個屬性,defer和async,因此script標籤的使用分為三種情況:   1.<script src="example.js"></script>    沒有defer或async屬性,瀏覽器會立即載入並執行相應的指令碼。也就是說在渲染script標籤之後的文

deferasync區別

先來試個一句話解釋仨,當瀏覽器碰到 script 指令碼的時候: <script src="script.js"></script> 沒有 defer 或 async,瀏覽器會立即載入並執行指定的指令碼,“立即”指的是在渲染該 script 標籤

JavaScript 之 非同步載入 deferasync區別

按照慣例,所有script元素都應該放在頁面的head元素中。這種做法的目的就是把所有外部檔案(CSS檔案和JavaScript檔案)的引用都放在相同的地方。可是,在文件的head元素中包含所有JavaScript檔案,意味著必須等到全部JavaScript

js中deferasync區別

一般情況 按照慣例,所有script元素都應該放在頁面的head元素中。這種做法的目的就是把所有外部檔案(CSS檔案和JavaScript檔案)的引用都放在相同的地方。可是,在文件的head元素中包含所有JavaScript檔案,意味著必須等到全部JavaSc

deferasync的原理與區別

上一篇剛轉載了一篇有關於網站效能優化的文章,其中提及到了頁面的載入和渲染的過程,提到了defer和async的相關區別,但是本人在此之前並沒有深究其中的區別。 defer和async是script標籤的兩個屬性,用於在不阻塞頁面文件解析的前提下,控制指令碼的下

defer=“deferasync=“async

指定 延遲 順序 def 們的 font 執行 nbsp bsp <script type="text/javascript" src="demo_defer.js" defer="defer"></script> 立即下載,但延遲執行。即腳本將在頁

<script>標簽中的 deferasync區別

inf src 維護 sync 腳本執行 順序 執行 使用 完成後   在html裏,使用<script>標簽對腳本進行外部或內部引用,<script>標簽包含了兩個特殊的屬性:defer與async,他們的區別如下:   1.若<script

區分deferasync

def 腳本 text view 腳本文件 節日快樂 就是 html5 ext 今天要介紹的讓腳本延遲加載,讓腳本延遲加載的方式有多種,最簡單粗暴的方法就是將 <script> 標簽放在 <body> 標簽的最下面,這樣就可以按照先後順序依次執行了,

Javascript的deferasync

標簽 amp 還在 說我 亂序 dom scrip ont 遇到 寫在前面   作為前端小白,在開發過程中,h5頁面中加載js腳本,一般我們直接<script src="./index.js"></script>就加載完成了;最近在啃《JS高級》

script標籤deferasync的不同

參考:https://www.cnblogs.com/neusc/archive/2016/08/12/5764162.html點選開啟連結  1.<script src="example.js"></script>    沒有defer或async屬性,瀏覽器會

用於非同步載入的deferasync詳解

定義和用法 <script type="text/javascript" defer="defer"> alert(document.getElementById("p1").first

JS的阻塞載入 defer async 屬性

JS具有阻塞特性,當瀏覽器在執行js程式碼時,不能同時做其它事情,即<script>每次出現都會讓頁面等待指令碼的解析和執行(不論JS是內嵌的還是外鏈的),JS程式碼執行完成後,才繼續渲染頁面。 所有瀏覽器在下載JS的時候,會阻止一切其他活動,比如其他資源的下

解決阻塞效應之deferasync

1、正常的網頁載入流程 1. 瀏覽器一邊下載HTML網頁,一邊開始解析 2. 解析過程中,發現<script>標籤 3. 暫停解析,網頁渲染的控制權轉交給JavaScript引擎 4. 如果<script>標籤引用

deferasync的非同步載入

(譯者注: 非同步載入,可以理解為無阻塞併發處理.) (譯者再注: 建議使用 defer,但是經測試發現 defer 屬性對頁面內的script無效,沒有時序差別.只對外部 js檔案生效 ) 我對於HTML5感到興奮不已的原因之一是它實現了眾多業界期待已久的特性。我們一直需要輸入框顯示空白提示,但都是用J

Javascript中的defer屬性async屬性的用法

為什麼需要非同步載入js檔案: 不使用非同步,文件在載入js程式碼時會阻塞其他資源的下載,導致空白頁面。 (1)置於頂部的js指令碼,瀏覽器在執行時需要花費時間去下載外鏈檔案的程式碼並執行,此時會導致明顯的延遲,顯示為空白頁面,使用者無法瀏覽內容,也無法與頁面進行互動。 (2)

deferasync區別

1. <script src="script.js"></script> 沒有 defer 或 async,瀏覽器會立即載入並執行指定的指令碼,“立即”指的是在渲染該 script 標籤之下的文件元素之前,也就是說不等待後續載入的文

GETPOST區別總結

get 、post 、區別一、GET和POST區別的普遍看法:HTTP 定義了與服務器交互的不同方法,最常用的有4種,Get、Post、Put、Delete,如果我換一下順序就好記了,Put(增),Delete(刪),Post(改),Get(查),即增刪改查,下面簡單敘述一下:1)Get, 它用於獲取信息,註

JS中const、varlet區別

方法 pre 命令 con 使用 它的 comm 作用 影響 在JavaScript中有三種聲明變量的方式:var、let、const。 1.const 聲明創建一個只讀的常量。這不意味著常量指向的值不可變,而是變量標識符的值只能賦值一次,必須初始化。 const b