HLJ 发布于
2025-06-11 14:22:23
0阅读

JavaScript脚本加载方式async和defer

JavaScript 脚本加载方式:async 和 defer

在 HTML 中,<script> 标签有两个属性可以控制脚本的加载和执行方式:asyncdefer。它们都用于优化页面加载性能,但工作方式有所不同。

普通 script 标签

<script src="script.js"></script>
  • 行为:立即下载并执行脚本,会阻塞 HTML 解析
  • 执行顺序:按照在文档中出现的顺序执行

defer 属性

<script defer src="script.js"></script>
  • 行为
    • 异步下载脚本(不阻塞 HTML 解析)
    • 在所有 HTML 解析完成后,DOMContentLoaded 事件触发前按顺序执行
  • 特点
    • 保证脚本执行顺序(按照在文档中出现的顺序)
    • 适合依赖 DOM 或需要按顺序执行的脚本

async 属性

<script async src="script.js"></script>
  • 行为
    • 异步下载脚本(不阻塞 HTML 解析)
    • 下载完成后立即执行(可能会中断 HTML 解析)
  • 特点
    • 不保证执行顺序(先下载完的先执行)
    • 适合独立脚本(如分析工具、广告脚本等)

对比表格

特性 普通 script defer async
下载是否阻塞 HTML
执行是否阻塞 HTML 否(在解析后执行) 是(下载完立即执行)
执行顺序保证
适合场景 少量关键脚本 依赖 DOM 的脚本 独立第三方脚本

使用建议

  1. 关键脚本:如果脚本对页面渲染至关重要,使用普通 script 标签(放在 body 底部)
  2. DOM 依赖脚本:使用 defer,确保 DOM 完全解析后再执行
  3. 独立脚本:使用 async,如分析工具、广告等不影响页面功能的脚本

示例

<!DOCTYPE html>
<html>
<head>
  <!-- 分析工具 - 使用 async -->
  <script async src="analytics.js"></script>
  
  <!-- 主应用脚本 - 使用 defer -->
  <script defer src="app.js"></script>
  
  <!-- 库文件 - 使用 defer -->
  <script defer src="library.js"></script>
</head>
<body>
  <!-- 页面内容 -->
  
  <!-- 关键脚本放在 body 底部 -->
  <script src="critical.js"></script>
</body>
</html>

理解 asyncdefer 的区别对于优化页面加载性能非常重要,特别是在现代网页开发中。

当前文章内容为原创转载请注明出处:http://www.good1230.com/detail/2025-06-11/874.html
最后生成于 2025-06-11 14:22:23
此内容有帮助 ?
0