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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...