【青训营】- Script标签中async和defer属性总结

简介: 【青训营】- Script标签中async和defer属性总结

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

本文是笔者在参加字节跳动第一届前端青训营进阶班的学习笔记。

为什么需要async和defer?

在进行详细介绍async和defer的区别之前,我们先讲讲为什么需要这两个属性,请看下面的例子,假如资源1需要加载很久才能完成,但是资源2很快就可以完成,此时用户需要等待很久才能看到页面,造成用户体验不好,所以我们需要一个推迟加载资源1的方法,这就是async和defer诞生的原因。

<script src="资源1.js"></script>
<script src="资源2.js"></script>
复制代码
  • 解决上述问题的方法

让第二个文件推迟执行,也就是说添加defer属性。

<script src="资源1.js" defer></script>
复制代码

async和defer的区别

1. 不含async也不含defer

此时执行顺序是同步的,也就是按照定义的顺序,谁在上面谁先执行,执行完一个在执行下一个。这是script标签在body底部的情况,如果在head中定义则会阻塞HTML的解析,请看下图。JS脚本的加载和执行会阻塞DOM的渲染。

2. 只含async

立即下载,不影响其他操作,等下载完成之后在暂停HTML解析然后执行脚本。(加载完成后会立即执行)

3. 只含defer

立即下载,但是在Html解析和script加载完之后在执行defer属性标记的脚本。

async和defer的相同之处

  • 都是异步加载。
  • 都不影响DOM解析和其他资源的加载。

执行步骤图示

如果你想对这两个属性进行测试,可以尝试使用node创建一个服务器,然后通过延迟返回来测试输出的顺序。

参考资料

相关文章
|
4天前
|
JavaScript 前端开发 Go
理解 <script> 标签的 defer 和 async 属性
理解 <script> 标签的 defer 和 async 属性
23 3
|
7月前
|
Web App开发 移动开发 JavaScript
面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别
面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别
67 0
|
4天前
|
前端开发 JavaScript 安全
react 如何return script 标签和内容
在React中,你不能直接返回一个`<script>`标签,因为React会尝试解析并渲染所有的子节点,而`<script>`标签的内容通常会被视为JavaScript代码,而不是要渲染的文本。 但是,如果你只是想在React组件中嵌入一些JavaScript代码,你可以使用`dangerouslySetInnerHTML`属性。这个属性允许你插入原始的HTML内容,但是它非常危险,因为它会执行其中的任何JavaScript代码。因此,只有在你完全信任该内容,并且知道它是安全的情况下,才应该使用这个属性。 以下是一个示例,它创建了一个包含JavaScript代码的`<script>`标签:
|
4天前
|
JSON 前端开发 JavaScript
从0开始学习JavaScript--深入理解JavaScript的async/await
JavaScript的异步编程在过去经历了回调地狱、Promise的引入,而今,通过async/await,让我们获得了更加优雅、可读性更高的异步编程方式。本文将深入探讨async/await的概念、用法,并通过丰富的示例代码展示其在实际应用中的威力。
|
4天前
|
JavaScript 前端开发 Go
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
30 0
|
9月前
|
移动开发 Go UED
<script> 标签上的 defer 和 async 属性是什么?
它会执行以下步骤 1.暂停 HTML 文档解析器 2.创建新请求以下载脚本 3.在脚本完全下载后立即执行脚本 4.执行结束后,继续解析 HTML 文档
|
10月前
|
前端开发 JavaScript Go
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
浏览器遇到script标签没有async和defer属性时,页面将会暂停解析来下载并执行script脚本,执行完毕继续解析页面(这样会阻塞页面,所以建议把script标签放在html底部)。
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
|
Go API
script标签中defer和async有什么不同?
script标签中defer和async有什么不同?
87 0
script标签中defer和async有什么不同?
|
JavaScript Go
script标签中的defer与async
script标签中的defer与async
script标签中的defer与async