defer和async的区别

面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别 script 标签中 defer 和 async 的区别:“在解析HTML文档过程中,defer和async标注的脚本都会立即下载。不同的是……” 阅读详情

先来试个一句话解释仨,当浏览器碰到 script 脚本的时候:

  1. <script src="script.js"></script>

    没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

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

    有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。

  3. <script defer src="myscript.js"></script>

    有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。

然后从实用角度来说呢,首先把所有脚本都丢到 </body> 之前是最佳实践,因为对于旧浏览器来说这是唯一的优化选择,此法可保证非脚本的其他一切元素能够以最快的速度得到加载和解析。

接着,我们来看一张图咯:


蓝色线代表网络读取,红色线代表执行时间,这俩都是针对脚本的;绿色线代表 HTML 解析。

此图告诉我们以下几个要点:

  1. defer 和 async 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)
  2. 它俩的差别在于脚本下载完之后何时执行,显然 defer 是最接近我们对于应用脚本加载和执行的要求的
  3. 关于 defer,此图未尽之处在于它是按照加载顺序执行脚本的,这一点要善加利用
  4. async 则是一个乱序执行的主,反正对它来说脚本的加载和执行是紧紧挨着的,所以不管你声明的顺序如何,只要它加载完了就会立刻执行
  5. 仔细想想,async 对于应用脚本的用处不大,因为它完全不考虑依赖(哪怕是最低级的顺序执行),不过它对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适的,最典型的例子:Google Analytics
ESP32+ST7789 LCD屏实战:5分钟搞定中文显示与图片渲染(附完整代码) 本文提供了一份详细的ESP32驱动ST7789 LCD屏幕的实战指南。通过清晰的SPI硬件连接说明、ESP-IDF框架下的初始化代码,以及图片渲染与中文字库构建的核心算法,帮助开发者快速实现中文显示与图片渲染功能,并附有完整的代码示例和性能优化技巧。 阅读详情

相关推荐

手把手排查IOMMU映射故障:从内核日志到硬件寄存器调试全指南

本文详细解析了IOMMU映射故障的排查方法,从内核日志分析到硬件寄存器调试,提供了一套完整的诊断流程。涵盖AMD和Intel平台的特定调试技巧,包括ATS协商失败、DMA传输错误等常见问题的解决方案,并介绍了高级调试工具链的搭建与性能优化策略。

weixin_42666036的博客 354

web前端面试题附答案010-script标签上可以同时加async和defer吗?

这个还真有点记不清了,但的确是有这么回事。但所有的浏览器都支持createElement。通过下面方式创建的js文件,相当于自动添加了async属性

xingyu_qie的专栏 881

卷积神经网络-猫狗识别(附源码)

利用python实现一个卷积神经网络,训练猫狗数据集,实现对猫狗图片的预测识别

m0_63223213的博客 2万+

script标签的defer和async属性详解

对于普通脚本,如果设置该属性,那么该脚本将会并行加载,不阻碍HTML文档的解析,当加载完成后,如果此时文档还没解析完成,则会终止解析,先执行该脚本,执行结束后再继续解析;,浏览器会在文档解析的同时并行的加载这些脚本。如果脚本是内联的,浏览器会先去执行这段内联的脚本,如果是外链的,那么先会去加载脚本,然后再执行。事件的执行,去执行已经加载好的脚本信息,如果此时脚本还未加载完成,则会等待脚本加载完成后,再执行该脚本。,则该脚本不会阻碍文档的解析,只会在文档解析的同时去加载脚本信息,当文档解析完成后,暂时阻止。

weixin_45092437的博客 7113

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 443

PyTorch实战(25)——使用PyTorch构建DQN模型

深度Q网络 (Deep Q-learning Network, DQN) 在强化学习领域取得了巨大的成功和广泛的应用,PyTorch 结合 gymnasium 库为我们提供了强大的工具,支持在各种强化学习环境中测试不同类型的深度强化学习模型。在本节中,我们使用 PyTorch 框架构建使用卷积神经网络架构的 DQN 模型,模型通过自主学习掌握 Atari 经典游戏《Pong》的操作策略,最终实现击败电脑对手的竞技目标。

盼小辉丶的博客 3445

async和defer的区别?

async和defer的异同主要是因为他们的加载和执行时机。普通的script(不使用async和defer)加载完会立即执行,会阻塞script标签下面的资源加载和dom的解析使用async后,script加载完后会立即执行。(网络)资源的加载过程是异步的,不会阻塞后续资源的加载dom和解析。使用defer后,script异步加载,html解析之后执行、DomContentLoaded之前执行。通常情况下defer的使用频率较高,它能保证script之间的变量依赖。...

qq_44621394的博客 4725

Open-AutoGLM 实战:手把手教你用 AI 操作手机「喂饭教程」

Open-AutoGLM 是一个由智谱AI开源的手机操作智能体框架,由手机端智能助手框架Phone Agent和9B大小的模型AutoGLM-Phone-9B组成,借助ADB自动执行点击、滑动、输入等操作——用户只需用自然语言描述任务,系统便能自动规划并完成整个操作流程。

blues_C的博客 1267

JS | defer和async的区别

defer与async的区别是:前者要等到整个页面正常渲染结束,才会执行;后者一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。一句话,defer是“渲染完再执行”,async是“下载完就执行”。另外,如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本是不能保证加载顺序的。

青春木鱼的博客 1555

在jetson上对fastdeploy进行源码编译(完整版)

在大多数Linux发行版中,你可以使用包管理器安装Python开发包。根据jetpack的版本选择对应的推理库版本。在~/.bashrc中写入这三行。

如果想成为中心,那么就到中心去吧。 678

手把手教你学Simulink——基于Simulink的隔离型DC-DC全桥变换器移相控制建模示例

本文详细介绍了基于Simulink的全桥移相变换器(PSFB)建模与控制方法。首先分析了全桥移相拓扑在大功率应用中的优势,包括ZVS实现、高频化和小型化特点。随后给出了具体设计参数和移相控制策略,采用电压外环+移相角内环的双闭环控制架构。文章重点演示了Simulink建模步骤,包括主电路搭建、移相PWM生成和PI控制器设计,并通过满载稳态、负载阶跃和轻载测试三种场景验证了系统性能。最后总结了工程实践要点,提出自适应控制等扩展方向,强调移相控制通过精准时间管理实现高效能量转换的核心价值。

MHD0815的博客 261

JS中关于async和defer作用与区别

script 是会阻碍 HTML 解析的,只有下载好并执行完脚本才会继续解析 HTMLdefer 和 async有一个共同点:下载此类脚本都不会阻止页面呈现(异步加载),区别在于:async 执行与文档顺序无关,先加载哪个就先执行哪个;defer会按照文档中的顺序执行 async脚本加载完成后立即执行,可以在DOM尚未完全下载完成就加载和执行;而defer脚本需要等到文档所有元素解析完成之后才执行script标签js执行顺序是否阻塞script在html顺序执行阻塞。

qq_34082921的博客 1821

Codex入门10-Goal自主任务(进阶必学:设定目标就不管了,AI自己干活到完成)

/goal 是Codex CLI最强大的进阶功能——设定一个目标,AI就会制定计划、分步执行、自我测试、持续迭代,即使你关掉终端也会继续。本文详解/goal的工作原理、配置启用方法、常用命令(pause/resume/status/clear),以及如何写出高质量的目标描述让AI高效自主完成任务。

yueyeguzhuo的专栏 454

【性能优化】async和defer关键字的区别

本文简单的介绍了一下JS异步加载种async和defer的区别,从中也提到了同步加载和异步加载的区别。

lxs1660275788的博客 1886

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

defer和async是什么??区别是什么??

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

niepan990810的博客 783

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

js中defer和async的区别

js中defer和async学习总结

越努力,越幸运! 6132

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HTML之defer和async的区别

Q1:script标签的defer,async的区别 这两个元素在红包书的第二章中就有介绍,先看下来自书中的定义: async:可选,表示应该立即下载脚本,不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本有效。 defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外文脚本有效。 了解了定义后。 解释一下就是defer和async都会让脚本异步加载,但...

mvvm实现原理 707

【HTML 面经】<script> 标签中的 defer 和 async 的区别

defer特性deferasync加载方式异步加载,非阻塞文档解析异步加载,非阻塞文档解析执行时机文档解析完成后、事件触发之前执行加载完成后立即执行执行顺序按照脚本在 HTML 中的顺序执行加载完成后立即执行,顺序不确定适用场景用于需要操作 DOM 且顺序执行的脚本用于独立、无关紧要的脚本,比如分析、广告脚本等对页面渲染的影响不会阻塞文档解析,页面渲染不受影响不会阻塞文档解析,页面渲染不受影响。

lph159的博客 1373

22. defer 和 async 区别是什么

defer和async都是<script>标签的属性,用于控制外部脚本的加载和执行行为。主要区别在于:defer:脚本在HTML 解析完成后事件触发前按顺序执行。async:脚本下载时不阻塞 HTML 解析,下载完成后立即执行执行顺序不确定。## 对比表格| 特性 | `defer` | `async` || 是否阻塞 HTML 解析 | ❌ 不阻塞 | ❌ 不阻塞 || 下载时是否保持顺序 | ✅ 是 | ❌ 否 |

weixin_64684095的博客 345

【JS中defer与async区别】

在JavaScript中,<script>标签的defer和async属性用于优化脚本加载和执行,避免阻塞页面渲染。defer脚本在HTML解析完成后按顺序执行,适合依赖DOM或有顺序要求的脚本;async脚本加载完成后立即执行,顺序不确定,适合独立脚本。defer保证DOM操作安全,async可能因执行过早导致DOM未就绪。合理选择两者可优化页面性能,defer适用于复杂逻辑,async适用于轻量独立脚本。

Emnational的博客 781

defer和async的详细区别

看过javascript高级程序设计的人,在javascript高级程序设计里,应该看到了介绍了有关defer和async的区别,可是比较浅显,而且也说得不是很清楚。下面我们来通过图片来详细了解下dfer和async的区别。 下面来看看这三句话: 1.<script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立

a_lonely_dancer的博客 4434

async与defer的区别

如果在末尾使用普通script,执行时会暂停页面渲染。不能提前下载js资源了。

DinosaurPrince的博客 290
上一篇: 总结伪类与伪元素
下一篇: DPI与PPI的区别
function__
博客等级 码龄10年 99粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值