当前位置: 首页 > news >正文

【HTML】<script>元素中的 defer 和 async 属性详解

文章目录

  • <script>元素中的 defer 和 async 属性详解
    • 基本概念
      • 传统脚本加载
      • defer 属性
      • async 属性
    • 对比表格
    • 使用场景建议
    • 注意事项
    • 示例

在HTML5中,<script> 元素有两个控制脚本加载和执行行为的属性:deferasync。这两个属性可以帮助开发者优化页面加载性能,特别是在处理外部脚本时。

基本概念

传统脚本加载

没有使用任何属性的 <script> 元素会阻塞HTML解析:

<script src="script.js"></script>
  • 浏览器遇到这个脚本时会暂停HTML解析
  • 下载并执行脚本
  • 执行完成后才继续解析HTML

defer 属性

<script defer src="script.js"></script>
  • 异步下载:不阻塞HTML解析,脚本在后台下载
  • 延迟执行:脚本会在HTML文档完全解析后,DOMContentLoaded事件触发前执行
  • 保持顺序:多个defer脚本会按照它们在文档中出现的顺序执行

async 属性

<script async src="script.js"></script>
  • 异步下载:不阻塞HTML解析,脚本在后台下载
  • 立即执行:脚本一旦下载完成就立即执行(可能会中断HTML解析)
  • 不保证顺序:多个async脚本不能保证执行顺序,先下载完成的先执行

对比表格

特性无属性deferasync
阻塞HTML解析
执行时机立即DOM解析完成后下载完成后立即
执行顺序顺序顺序不确定
适合场景必须立即执行的脚本依赖DOM的脚本独立模块,不依赖其他脚本

使用场景建议

  1. 使用 defer

    • 脚本需要访问完整的DOM
    • 脚本依赖于其他脚本(需要保持执行顺序)
    • 示例:页面初始化脚本、DOM操作库
  2. 使用 async

    • 脚本完全独立,不依赖其他脚本
    • 不操作DOM或可以等待
    • 示例:统计分析代码、广告脚本
  3. 不使用任何属性

    • 脚本很小且必须立即执行
    • 脚本对页面渲染至关重要(如首屏关键功能)

注意事项

  • 这两个属性只对外部脚本(有src属性的脚本)有效,对内联脚本无效
  • 如果同时使用 deferasync,现代浏览器会优先采用 async 的行为
  • defer脚本保证在 DOMContentLoaded 事件前执行
  • 使用这些属性时,脚本不应使用 document.write,因为文档可能已经解析完成

示例

<!DOCTYPE html>
<html>
<head><!-- 不影响DOM解析的独立脚本 --><script async src="analytics.js"></script><!-- 需要DOM就绪且保持顺序的脚本 --><script defer src="jquery.js"></script><script defer src="app.js"></script>
</head>
<body><!-- 页面内容 -->
</body>
</html>

通过合理使用 defer 和 async 属性,可以显著提高页面加载性能,特别是对于包含多个脚本的页面。

http://www.dtcms.com/a/299912.html

相关文章:

  • 认识泛型、泛型类和泛型接口
  • 服务器生成图片
  • 力扣872. 叶子相似的树
  • Ubuntu系统安装EasyTier组网
  • rt-thread 5.2.1 基于at-start-f437开发过程记录
  • Flutter开发 BUG 记录 (持续更新)
  • [特殊字符] 嵌入式队列精要指南:数据流的艺术与实战
  • Python爬虫实战:研究furl库相关技术
  • 阿里开源Qwen3-Coder,编程大模型进入高效时代
  • 文件操作认识
  • 差模干扰 共模干扰
  • QUIC协议如何在UDP基础上解决网络切换问题
  • PCIe 的L状态(链路状态)和D状态(设备状态)
  • 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
  • oracle数据库表空间碎片整理
  • 基于java的在线教育平台管理系统、在线学习系统的设计与实现
  • 图解同步/异步,阻塞/非阻塞,五种模型之差
  • 【AcWing 830题解】单调栈
  • Node.js 模拟 Linux 环境
  • 栈----2.最小栈
  • S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例
  • OpenFeign-远程调用
  • 解决英文版Windows10安装WireShark报错
  • 秋招Day19 - 分布式 - 分布式设计
  • MySQL事务原理
  • C 与 C++ 的区别:发展、特性及优缺点详解
  • [1+2cos(ω)+2cos(2ω)+……+2cos(Nω)]sin(ω/2)=sin[(ω+1/2)N]
  • 【学习路线】Linux从入门到精通:系统化学习路线指南
  • 亚马逊测评采购:如何打造安全的环境,技术基础关键
  • Linux应用开发基础知识——Framebuffer应用编程(六)