HTML5 defer和async的區別

来源:http://www.cnblogs.com/shouce/archive/2016/06/07/5565898.html
-Advertisement-
Play Games

在HTML頁面中插入Javascript的主要方法,就是使用<script>元素。這個元素由Netscape創造併在Netscape Navigator 2中首先實現。後來,這個元素就被加入到正式的HTML規範中。HTML4.01為<script>定義了6個屬性,包括defer和async。defe ...


在HTML頁面中插入Javascript的主要方法,就是使用<script>元素。這個元素由Netscape創造併在Netscape Navigator 2中首先實現。後來,這個元素就被加入到正式的HTML規範中。HTML4.01為<script>定義了6個屬性,包括defer和async。defer和async都是可選的,且只對外部腳本文件有效。

  一、當瀏覽器解析到script腳本,沒有defer或async時:   <script src="main.js"></script> 瀏覽器會立即載入並執行指定的腳本,“立即”指在渲染該script標簽之下的文檔元素之前,也就是說不等待後續載入的文檔元素,讀到就載入並執行。   二、當瀏覽器解析到script腳本,有async時:   <script async src="main.js"></script> 瀏覽器會立即下載腳本,但不妨礙頁面中的其他操作,比如下載其他資源或等待載入其他腳本。載入和渲染後續文檔元素的過程和main.js的載入與執行並行進行(非同步)。   async不保證按照腳本出現的先後順序執行,因此,確保兩者之前互不依賴非常重要,指定async屬性的目的是不讓頁面等待兩個腳本的下載和執行,從而非同步載入頁面其他內容,建議非同步腳本不要在載入期間修改DOM。   非同步腳本一定會在頁面的load事件前執行,但可能會在DOMContentLoaded事件觸發之前或之後執行。支持非同步腳本的瀏覽器有Firefox 3.6、Safari 5 和Chrome。   三、當瀏覽器解析到script腳本,有defer時:   <script defer="defer" src="main1.js"></script> <script defer="defer"  src="main2.js"></script> 表示腳本會被延遲到文檔完全被解析和顯示之後再執行,載入後續文檔元素的過程將和main.js的載入並行進行(非同步)。HTML5規範要求腳本按照它們出現的先後順序執行,因此第一個延遲腳本會先於第二個延遲腳本執行,而這兩個腳本會先於DOMContentLoaded事件。在現實當中,延遲腳本並不一定會按照順序執行,也不一定會在DOMContentLoaded事件觸發前執行,因此最好只包含一個延遲腳本。   IE4~IE7還支持對嵌入腳本的defer屬性,但IE8以及之後的版本則完全支持HTML5規定的行為。   IE4,Firefox 3.5,Safari 5和Chrome是最早支持defer屬性的瀏覽器。其他瀏覽器胡忽略這個屬性,像平常一樣處理腳本,為此,把延遲腳本放在頁面底部仍然是最佳選擇。     藍色線代表網路讀取,紅色線代表執行時間,這倆都是針對腳本的;綠色線代表 HTML 解析。   此圖告訴我們以下幾個要點:   defer 和 async 在網路讀取(下載)這塊兒是一樣的,都是非同步的(相較於 HTML 解析) 它倆的差別在於腳本下載完之後何時執行,顯然 defer 是最接近我們對於應用腳本載入和執行的要求的 關於 defer,此圖未盡之處在於它是按照載入順序執行腳本的,這一點要善加利用 async 則是一個亂序執行的主,反正對它來說腳本的載入和執行是緊緊挨著的,所以不管你聲明的順序如何,只要它載入完了就會立刻執行 仔細想想,async 對於應用腳本的用處不大,因為它完全不考慮依賴(哪怕是最低級的順序執行),不過它對於那些可以不依賴任何腳本或不被任何腳本依賴的腳本來說卻是非常合適的,最典型的例子:Google Analytics
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.進入官網https://nodejs.org/en/download/ 2.安裝過程基本直接“NEXT”就可以了。(windows的安裝msi文件在過程中會直接添加path的系統變數,變數值是你的安裝路徑,例如“C:\Program Files\nodejs”)。 3.安裝完成後,cmd進入,然 ...
  • video 用於在HTML或者XHTML文檔中嵌入視頻內容 使用 video 元素至少要提供兩種視頻格式的文件:OGG 和 MP4 1. OGG:採用 Theora 視頻格式和 Vorbis 音頻解碼器 (目前比較主流的視頻格式) 2. MPEG 4:採用 H.264 視頻格式和 AAC 音頻解碼器 ...
  • 上一篇文章中我們就簡單的學習了HTML5 地理定位,那麼今天告訴大家我在項目中遇到的一個問題吧,就是怎麼實現點擊一個按鈕就可以調到百度地圖,並且獲取到你當前的位置,並且導航到指定的地方去。 不想看步驟的可以直接下載DEMO 下載 一、獲取目的地坐標 打開百度地圖API 滑鼠點擊拾取坐標網頁,http ...
  • DOM: jquery: ...
  • 效果展示 http://hovertree.com/texiao/css/25/ 本效果適合PC,也適合移動端手機掃描二維碼查看效果:效果圖:代碼如下: 轉自:http://hovertree.com/h/bjaf/csswuliu.htm 特效彙總:http://www.cnblogs.com/r ...
  • 效果說明:配合已有CSS樣式,載入插件後,網頁元素可以隨意在視窗內拖拽,設置了原位置半透明和拖拽半透明的效果選項,可根據需要選擇。另外,當頁面上有多個可拖拽元素時,可以載入另外一個用於設置z-index的插件,模擬Windows視窗點擊置頂效果。 js/jquery.jLdraggable.js: ...
  • 每個學過編程的人都寫過“HelloWorld” 但99乘法表,我想也應該成為每個編程初學者的必編程式 這是JavaScript的實現方法,非常適合初學者!!! 以下是代碼及註釋 1 <!DOCTYPE html> 2 <head> 3 <meta http-equiv="Content-Type" ...
  • 在頁面中除了內容圖片以外的圖片都是修飾圖,去掉無意義修飾圖或者用css替換秀試圖效果是減少HTTP請求次數的有效方式。 一:css替換圖片 圓角 陰影 漸變 等css效果在當前主瀏覽器中已得到廣泛的支持,而在之前是通過圖片來實現這些效果的,比如圓角按鈕 圓角按鈕相對來說只需要要一次HTTP請求,但是 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...