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经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...
随机推荐
- 源启行业AI平台 银行智能业务的驱动引擎
AI技术已经深入金融行业,在营销.渠道.风控等领域广泛应用,但人工智能开发与应用面临成本高.难度大.门槛高.重复建设.无统一管理复用AI模型资产等问题,这些问题也正是源启AI行业平台要解决的. 源启行 ...
- WSLg 中文输入法 fcitx5
随着 Win11 22H2 和 WSLg 的推出,很多开启输入法的教程都过时了.记录一下最新实践: WSL 安装 Ubuntu 后,安装中文语言 sudo /usr/bin/gnome-languag ...
- sqlalchemy 的 schema 合并模块 alembic 使用
alembic 很好的解决了升级数据库改变表结构的传统难题,官方的推荐用法是当一个工具用,这是从 Stack Overflow 扒到的直接用内部 api 的代码,操作有点像 diff_patch. 来 ...
- 【C#】【平时作业】习题-4-流程控制
T1 创建一个Windows应用程序,先输入年龄值,再判断是否大于18,最后显示判断结果,运行效果如图所示. 提示: 注意保持逻辑完整: 引用数据需要明确出处. [程序代码] private void ...
- ArgoCD 简介
fork https://github.com/DevopsChina/lab/tree/main/deploy/lab04-argocd 1. ArgoCD 简介 基于 kubernetes 的声明 ...
- docker容器内使用sudo 报错bash: sudo: command not found
解决办法: 先查看linux系统版本: cat /proc/version 1.RedHat系主要有RedHat,Fedora,CentOs等: RedHat系列的包管理工具是yum,执行 yum i ...
- Qt编写安防视频监控系统61-子模块5设备控制
一.前言 设备控制模块,和云台控制模块都是用的onvif协议通信,可以对选中的通道的摄像机(ONVIF协议),进行获取参数.设置参数.手动校时.重启设备.抓拍图片.模拟报警等操作,可以对摄像机的明亮度 ...
- Anaconda下载以前的旧版本
由于Anaconda新的版本,可能不太适合我们当前开发,我们需要下载历史版本. 可以尝试从两个地方下载:1.推荐从 "清华大学开源软件镜像站" 下载:https://mirrors ...
- Android开发快速入门iOS开发概览
注:本文同步发布于微信公众号:stringwu的互联网杂谈 Android开发快速入门iOS开发概览 1 前言 笔者总结了自己在拥有Android开发的相关基础后入门iOS开发时遇到的点点滴滴给其他想 ...
- 前端(三)-JavaScript
1.基本语法 1.1 引入JavaScript 1.1.1行内引入 <input type="button" value="轻轻点我一下" onclick ...