延遲

比較行為

屬性下載執行HTML 解析主要風險
沒有任何即時已暫停初始渲染速度慢
非同步平行線盡快下載時暫停競賽條件
延遲平行線HTML 之後繼續功能延遲

執行順序:非同步、延遲和兩者

了解具有不同屬性的腳本的執行順序對於管理依賴關係和確保正確的功能至關重要。其運作原理如下:

  1. 常規腳本(無非同步或延遲):

  2. 非同步腳本:

  3. 延遲腳本:

  4. 同時具有非同步且延遲的腳本:

執行順序範例:

可能的執行順序:

  1. 1.js(區塊解析)
  2. 3.js 或 2.js(以先下載者為準)
  3. 2.js 或 3.js(以第二個下載者為準)
  4. 4.js
  5. 5.js

請注意,如果 1.js 下載時間較長,則 2 和 3 可以按任何順序執行,甚至可以在 1 之前執行。

最佳實踐

  1. 將非同步用於分析等獨立腳本。
  2. 對依賴 DOM 或其他腳本的腳本使用 defer。
  3. 將腳本放置在 中,非同步或延遲提前開始下載。
  4. 對於關鍵腳本,請考慮 中的內聯腳本。

瀏覽器支援

現代瀏覽器廣泛支援非同步和延遲。對於較舊的瀏覽器,請考慮使用腳本載入器或將腳本放置在 的末端。

","image":"http://www.luping.net/uploads/20241009/1728469445670659c5d48f7.jpg","datePublished":"2024-11-08T07:51:11+08:00","dateModified":"2024-11-08T07:51:11+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 掌握腳本標籤:使用 Async 和 Defer 進行精確的腳本控制

掌握腳本標籤:使用 Async 和 Defer 進行精確的腳本控制

發佈於2024-11-08
瀏覽:397

Mastering Script Tags: Using Async and Defer for Precise Script Control

在 Web 開發領域,優化頁面載入時間至關重要。

基礎知識:腳本如何加載

預設情況下,當瀏覽器遇到

  1. 暫停 HTML 解析
  2. 下載腳本
  3. 執行腳本
  4. 繼續 HTML 解析

此過程會減慢頁面渲染速度,特別是對於大型腳本或緩慢的連接。此外,如果腳本在某些 HTML 元素完全載入之前執行,則可能會導致錯誤,如果腳本未正確放置在文件中,這種情況通常會發生。

非同步與延遲:一把雙面刃

非同步


  • 它的作用: 在 HTML 解析繼續的同時非同步下載腳本。
  • 執行時:下載完成後,暫停 HTML 解析。
  • 使用時:不依賴其他腳本或DOM內容的獨立腳本。
  • 警告: 可能會亂序執行,可能會破壞依賴關係。

延遲


  • 它的作用: 在 HTML 解析繼續的同時下載腳本。
  • 執行時: HTML解析完成之後,DOMContentLoaded事件前。
  • 使用時:依賴DOM內容或需要以特定順序執行的腳本。
  • 警告: 可能會延遲關鍵功能的執行。

比較行為

屬性 下載 執行 HTML 解析 主要風險
沒有任何 即時 已暫停 初始渲染速度慢
非同步 平行線 盡快 下載時暫停 競賽條件
延遲 平行線 HTML 之後 繼續 功能延遲

執行順序:非同步、延遲和兩者

了解具有不同屬性的腳本的執行順序對於管理依賴關係和確保正確的功能至關重要。其運作原理如下:

  1. 常規腳本(無非同步或延遲):

    • 依照它們在文件中出現的順序執行。
    • 阻止 HTML 解析,直到下載並執行它們。
  2. 非同步腳本:

    • 並行下載並在可用時立即執行。
    • 不保證執行順序;它們一下載就運行。
    • 可能在 DOM 完全載入之前執行。
  3. 延遲腳本:

    • 並行下載,但僅在 HTML 解析完成後執行。
    • 依照它們在文件中出現的順序執行。
    • 在 DOMContentLoaded 事件之前執行。
  4. 同時具有非同步且延遲的腳本:

    • async 屬性在現代瀏覽器中優先。
    • 在不支援非同步的舊版瀏覽器中,它們會回退到延遲行為。

執行順序範例:






可能的執行順序:

  1. 1.js(區塊解析)
  2. 3.js 或 2.js(以先下載者為準)
  3. 2.js 或 3.js(以第二個下載者為準)
  4. 4.js
  5. 5.js

請注意,如果 1.js 下載時間較長,則 2 和 3 可以按任何順序執行,甚至可以在 1 之前執行。

最佳實踐

  1. 將非同步用於分析等獨立腳本。
  2. 對依賴 DOM 或其他腳本的腳本使用 defer。
  3. 將腳本放置在 中,非同步或延遲提前開始下載。
  4. 對於關鍵腳本,請考慮 中的內聯腳本。

瀏覽器支援

現代瀏覽器廣泛支援非同步和延遲。對於較舊的瀏覽器,請考慮使用腳本載入器或將腳本放置在

的末端。
版本聲明 本文轉載於:https://dev.to/umairian/mastering-script-tags-using-async-and-defer-for-precise-script-control-d9n?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解決此問題,必須確保提供給HAAR CASCADE XML文件的路徑有效。在提供的代碼片段中,級聯分類器裝有硬編碼路徑,這可能對您的系統不准確。相反,OPENCV提...
    程式設計 發佈於2025-07-18
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-07-18
  • 編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    錯誤:“ usr/bin/ld:找不到-l “ 此錯誤表明鏈接器在鏈接您的可執行文件時無法找到指定的庫。為了解決此問題,我們將深入研究如何指定庫路徑並將鏈接引導到正確位置的詳細信息。 添加庫搜索路徑的一個可能的原因是,此錯誤是您的makefile中缺少庫搜索路徑。要解決它,您可以在鏈接器命令中添...
    程式設計 發佈於2025-07-18
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-18
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-07-18
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-07-18
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-07-18
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-07-18
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-07-18
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-07-18
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-07-18
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-07-18
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 在使用Chrome and IE9中的圖像時遇到的一個頻繁的問題是圍繞圖像的持續薄薄邊框,儘管指定了圖像,儘管指定了;和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下...
    程式設計 發佈於2025-07-18
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-07-18
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-07-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3