延遲

比較行為

屬性下載執行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
瀏覽:611

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]刪除
最新教學 更多>
  • 找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    如何在mySQL中使用mySql 檢索最大計數,您可能會遇到一個問題,您可能會在嘗試使用以下命令:理解錯誤正確找到由名稱列分組的值的最大計數,請使用以下修改後的查詢: 計數(*)為c 來自EMP1 按名稱組 c desc訂購 限制1 查詢說明 select語句提取名稱列和每個名稱...
    程式設計 發佈於2025-04-27
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-04-27
  • 編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    錯誤:“ usr/bin/ld:找不到-l “ 此錯誤表明鏈接器在鏈接您的可執行文件時無法找到指定的庫。為了解決此問題,我們將深入研究如何指定庫路徑並將鏈接引導到正確位置的詳細信息。 添加庫搜索路徑的一個可能的原因是,此錯誤是您的makefile中缺少庫搜索路徑。要解決它,您可以在鏈接器命令中添...
    程式設計 發佈於2025-04-27
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-04-27
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-04-27
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-04-27
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 中刪除一個頻繁的問題時,在與Chrome and IE9中的圖像一起工作時,遇到了一個頻繁的問題。和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下CSS ID塊創建帶...
    程式設計 發佈於2025-04-27
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-04-27
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-04-27
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-04-27
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-04-27
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-04-27
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確...
    程式設計 發佈於2025-04-27
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-04-27
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-04-27

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

Copyright© 2022 湘ICP备2022001581号-3