script 标签中 defer 和 async 的区别
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 解析完成之后执行。
执行时机图示:
- 普通
<script>标签:同步加载,立即阻塞 HTML 解析,加载完毕后执行。 defer脚本:异步加载,不阻塞 HTML 解析,等 HTML 全部解析完后按顺序执行。async脚本:异步加载,不阻塞 HTML 解析,但加载完毕后立即执行,且无序。
哪个更好?
- 当脚本依赖于页面的 DOM 结构时,使用
defer更安全。 - 当脚本与其他脚本和页面结构无关时,可以使用
async以加快加载和执行速度。
script 标签中 defer 和 async 的区别的更多相关文章
- script标签中defer和async的区别(稀土掘金学习)
如果没有defer或async属性,浏览器会立即加载并执行相应的脚本.它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载. 下图可以直观的看出三者之间的区别: 其中蓝色 ...
- script标签中defer和async属性的区别
这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...
- HTML <script> 标签的 defer 和 async 属性
HTMKL <script>标签中有defer和async属性,简单介绍一下两者的区别吧. 普通的script标签会让浏览器立即下载并执行完毕,执行也是按照先后顺序,再进行后面的解析. ...
- script标签的defer、async属性
之前一直对script标签的defer.async属性一知半解,直到看到了论坛上某大神发的图片,茅塞顿开!!!!!
- HTML中script 标签中的那些属性
在HTML中, <script> 标签用于嵌入或引用JavaScript代码. 在 <script> 标签中,有两个属性可以用来控制脚本的加载和执行方式: async 和 de ...
- <script>标签里的defer和async属性 区别(待补充)
defer与async的区别(表格显示): table th:first-of-type { width: 150px; } table th:nth-of-type(2) { } 区别 defer ...
- script标签中的async、defer属性
Script标签是我们常用的引用js脚本的一种方式. 撸代码的时候,我们常常只写src属性,直接忽略其他属性. 最近发现了2个可以利用的属性:async.defer. 顾名思义async就是异步,在不 ...
- url,href和src的区别,defer和async的区别
URL(Uniform Resource Locator):统一资源定位符,互联网上的每个文件都有一个唯一的URL,基本URL包含协议,IP地址,路径和文件名. 重点:herf和src的区别 href ...
- 关于html中的 script标签中的 代码写法有效性? easyui tabs的href不能载入内容页面
script标签, 即 html中的 js脚本区域中: 它其实就是一个 普通的 html标签, 在 html 渲染器 parser 看来, 它跟其他任何的普通 的 html标签 , 比如 p 标签, ...
- javaScript中的小细节-script标签中的预解析
首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...
随机推荐
- eShopOnContainer 中 Grpc 服务定义与实现
eShopOnContainer 中 Grpc 服务定义与实现 服务于前端的后端 (BFF) 模式是 API 网关模式的一种变形,针对外部使用者的不同需求,为每种不同的客户端使用者提供一种后端 API ...
- 程序员出海做 AI 工具:如何用 similarweb 找到最佳流量渠道?
如题,今天给大家带来实操的一个小教程.这里先抛出个问题:"做海外流量增长,如何为产品制定营销渠道?" 分享一个方法只需要 3 步,方法如下: 找到和你产品最接近的细分 Top 竞争 ...
- 【Javaweb】在项目中添加MyBatis依赖等
pom.xml 仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 https://develope ...
- Mac 配置多版本JDK
@ 目录 前言 一.下载并安装多个JDK版本 二.配置环境变量 三.切换JDK版本 四.下篇预告!!! 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文 ...
- fatal: repository 'http:/xxxx/root/x.git/' not found
我遇到的问题其实就是gitlab旧服务器迁移到新服务器之后用户的没权限了没有权限操作了 所以抛出该异常 解决办法是赋予新的权限
- Qt开源作品41-网络调试助手增强版V2022
一.前言 做网络通信少不了网络收发数据,经常用到网络数据的调试相关工具,以便侦听数据用来判断数据是否正确,许久以前就发布过类似的工具,第一版大概在2013年,第二版大概在2017年,中间参考过不少的网 ...
- MyBatis中的 10 个宝藏技巧!
前言 说到 MyBatis,很多小伙伴都会用,但未必用得"惊艳". 实际上,这个轻量级的持久层框架还有很多隐藏的"宝藏技巧". 如果你能掌握这些技巧,不但能让开 ...
- 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
出现题目的异常,多是引用第三方控件引起的. 在NEW时,需要初始化该对象. AxESACTIVEXLib.AxESActiveX ax = new AxESACTIVEXLib.AxESActiveX ...
- Codeblocks 显示所创建工程的文件夹
问题: 有时创建完工程后没有默认打开文件夹: 方法: 使用F2 +shift view->manager
- 如何解决:Android Studio (version 4.1); Flutter plugin not installed and Dart plugin not installed errors
出现的现象 android studio 4.1已经安装了flutter和dart插件,但是执行 flutter doctor依然报错. [!] Android Studio (version 4.1 ...