https://www.cnblogs.com/huangtq/p/18422775

在 <script> 标签中,defer 和 async 是两个用于控制 JavaScript 脚本加载和执行行为的属性。它们的主要区别在于加载顺序执行时机。具体如下:

1. defer 属性

  • 加载方式: 使用 defer 的脚本在 HTML 解析的同时异步加载。
  • 执行顺序: 所有带有 defer 的脚本会按照它们在页面中的出现顺序依次执行。
  • 执行时机: 脚本会在 HTML 文档解析完毕后执行,也就是在 DOMContentLoaded 事件触发之前,但不会阻塞页面的解析。
  • 适用场景: 当脚本依赖于 DOM 结构时,使用 defer 是理想的,因为它保证了脚本执行时 DOM 已经完全加载完成。

例子:

<script src="example.js" defer></script>

2. async 属性

  • 加载方式: 使用 async 的脚本也会异步加载,与 HTML 解析同时进行。
  • 执行顺序: 脚本会在加载完成后立即执行,不保证按照它们在页面中的出现顺序执行。
  • 执行时机: 一旦脚本加载完成,就会立即执行,可能会在 HTML 解析完成之前执行,也可能在解析过程中执行。
  • 适用场景: 用于独立、不依赖于其他脚本或 DOM 内容的脚本,例如分析工具或广告脚本,因为它们可以尽快执行而不影响页面的解析。

例子:

<script src="example.js" async></script>

区别总结:

  • 加载顺序async 无序(哪个脚本先加载完哪个先执行),defer 有序(按照 HTML 中的顺序执行)。
  • 执行时机async 脚本一旦加载完成立刻执行,defer 脚本会在 HTML 解析完成之后执行。

执行时机图示:

  1. 普通 <script> 标签:同步加载,立即阻塞 HTML 解析,加载完毕后执行。
  2. defer 脚本:异步加载,不阻塞 HTML 解析,等 HTML 全部解析完后按顺序执行。
  3. async 脚本:异步加载,不阻塞 HTML 解析,但加载完毕后立即执行,且无序。

哪个更好?

  • 当脚本依赖于页面的 DOM 结构时,使用 defer 更安全。
  • 当脚本与其他脚本和页面结构无关时,可以使用 async 以加快加载和执行速度。

script 标签中 defer 和 async 的区别的更多相关文章

  1. script标签中defer和async的区别(稀土掘金学习)

    如果没有defer或async属性,浏览器会立即加载并执行相应的脚本.它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载. 下图可以直观的看出三者之间的区别: 其中蓝色 ...

  2. script标签中defer和async属性的区别

    这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...

  3. HTML <script> 标签的 defer 和 async 属性

    HTMKL <script>标签中有defer和async属性,简单介绍一下两者的区别吧.   普通的script标签会让浏览器立即下载并执行完毕,执行也是按照先后顺序,再进行后面的解析. ...

  4. script标签的defer、async属性

    之前一直对script标签的defer.async属性一知半解,直到看到了论坛上某大神发的图片,茅塞顿开!!!!!

  5. HTML中script 标签中的那些属性

    在HTML中, <script> 标签用于嵌入或引用JavaScript代码. 在 <script> 标签中,有两个属性可以用来控制脚本的加载和执行方式: async 和 de ...

  6. <script>标签里的defer和async属性 区别(待补充)

    defer与async的区别(表格显示): table th:first-of-type { width: 150px; } table th:nth-of-type(2) { } 区别 defer ...

  7. script标签中的async、defer属性

    Script标签是我们常用的引用js脚本的一种方式. 撸代码的时候,我们常常只写src属性,直接忽略其他属性. 最近发现了2个可以利用的属性:async.defer. 顾名思义async就是异步,在不 ...

  8. url,href和src的区别,defer和async的区别

    URL(Uniform Resource Locator):统一资源定位符,互联网上的每个文件都有一个唯一的URL,基本URL包含协议,IP地址,路径和文件名. 重点:herf和src的区别 href ...

  9. 关于html中的 script标签中的 代码写法有效性? easyui tabs的href不能载入内容页面

    script标签, 即 html中的 js脚本区域中: 它其实就是一个 普通的 html标签, 在 html 渲染器 parser 看来, 它跟其他任何的普通 的 html标签 , 比如 p 标签, ...

  10. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

随机推荐

  1. macOS 中有什么好用的虚拟机软件?

    macOS 中有什么好用的虚拟机软件? https://www.zhihu.com/question/66366176/answer/268256386 问题:1.macOS是否有专门的虚拟机软件?或 ...

  2. Python中定位元素包含文本信息的详细解析与代码示例

    在Python编程中,特别是在进行网页自动化测试或数据抓取时,定位包含特定文本信息的元素是一个常见的需求.通过合适的工具和库,可以高效地查找和操作这些元素.本文将详细介绍如何在Python中定位包含文 ...

  3. Soulmate

    理想之所以是理想,也就是因为它只能存在于脑海中,天上月是天上月,水中花是水中花.但我们仍可以怀揣着对乌托邦的向往,所以,我对理想中的对象设想如下: 原来形容一个女子的眉眼,我总喜欢说眉眼如黛,眉如远山 ...

  4. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v5.0版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  5. 超实用 JMeter BeanShell Sampler 教程

    超实用 JMeter BeanShell Sampler 教程 宝子们,今天咱继续深挖 JMeter 里超厉害的 BeanShell Sampler,这次多来点实际工作中的例子,让你彻底搞懂它! 一. ...

  6. milvus基础

    nlist和nprobe nlist 是调用 create_index 时设置的参数,nprobe 则是调用 search 时设置的参数. IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划 ...

  7. UML之发现用例

    用例是最简单的UML元素,用例图是最简单的UML图,但它也可能是UML中最有用的元素之一.尽管我们用包将工作分解为工作包.团队任务或单项任务,也就是说包是组织UML中的各种图及元素的工具.但是用例图可 ...

  8. asp.net core 3.0 发布单文件,进程外托管,复制视图

    <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <!--运行环境(发布单文件 ...

  9. .NET 响应式编程 System.Reactive 系列文章(一):基础概念

    .NET 响应式编程 System.Reactive 系列文章(一):基础概念 引言 在现代软件开发中,处理异步事件和数据流已经成为常见的需求,比如用户输入.网络请求.传感器数据等.这些数据流通常是无 ...

  10. wpf ScrollViewer 滚动动画

    wpf ScrollViewer 滚动动画: <Window x:Class="WpfTest.FloatTextWindow" xmlns="http://sch ...