JS—script标签加载:1分钟掌握async与defer

个人博客:haichenyi.com。感谢关注

一. 目录

  • 一–目录
  • 二–DOMContentLoaded事件
  • 三–async与defer

二. DOMContentLoaded事件

  概念: DOMContentLoaded是浏览器提供的一个关键事件,它标致着HTML文档解析完成且DOM树构建完毕(无需等待样式表和外部资源加载完毕)。
核心特征

特性说明
触发时机HTML解析完成,DOM树就绪时触发,无需等待图片等外部资源加载
与load事件的区别load事件需要等待图片样式等外部资源加载完毕才触发,晚于DOMContentLoaded事件
适用场景需要DOM构建完毕就需要做的处理,如初始化交互功能、绑定事件等等

三. async与defer

  async与defer都是用于优化脚本加载行为的html属性。

  1. 共同点: 都是异步下载脚本,不阻塞html解析
  2. 核心对比
特性asyncdefer
​执行时机下载完毕之后立即执行,可能中断HTML解析下载完成之后,HTML解析完毕,DOMContentLoaded之前按顺序执行
执行顺序无序(下载完成后立即执行)有序(按文档顺序执行)
适用场景独立脚本(如统计、广告),无依赖且无需操作 DOM依赖其他脚本或需操作 DOM 的脚本。
  1. 详细说明
  • 普通脚本(无属性)
    行为: 阻塞HTML的解析,下载并执行完成之后接着解析HTML。
    缺点: 脚本比较大的时候,HTML的页面加载延迟。
  • async脚本
    流程: 异步下载—>下载完成之后立即执行
    风险: 若脚本需要操作DOM,当脚本执行的时候,DOM可能还未创建,需要自行监听DOMContentLoaded事件
    示例: 适合不依赖其他脚本独立执行的代码(统计脚本,广告脚本等等)
  • defer脚本
    流程: 异步下载—>下载完成之后,等待HTML解析完成按文档顺序执行,DOMContentLoaded事件之前执行
    优势: 不阻塞解析,并且保证顺序执行,适合依赖脚或DOM操作
    示例: 引入库(如 jQuery)及其插件时,确保插件在库之后执行。
  1. 特殊情况
  • async和defer共存的情况下,async优先级更高,defer会被忽略
  • 动态添加脚本,默认行为类似async,可设置async=false,模拟defer
  1. 执行顺序示例
<script defer src="defer1.js"></script>  <!-- 先执行 -->
<script async src="async1.js"></script>  <!-- 可能最先或最后执行 -->
<script defer src="defer2.js"></script>  <!-- 在 defer1 后执行 -->
//从上往下解析,解析到defer1.js,异步下载
//解析到async1.js,异步下载
//解析到defer2.js,异步下载
//当defer1.js下载完成,等着html解析完成之后执行
//当defer2.js下载完成之后,等defer1.js执行完后之后,执行
//async1只要下载完了之后就执行,可能在defer1.js的前面,可能在defer1.js的后面,也可能在defer2.js的前面,也可能在它的后面,都要看网络情况。async1.js下载的快慢决定的。
  1. 如何选择?
  • 用 async: 脚本独立、无依赖、不操作 DOM 或能处理延迟执行。
  • 用 defer: 需操作 DOM、有依赖关系或要求按顺序执行。
  • 普通脚本: 建议仅在小型脚本或需同步执行时使用(如文档底部)。

通过合理使用 async 和 defer,可显著提升页面加载性能,同时确保脚本逻辑正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025-3-24 leetcode刷题情况(动态规划——01背包)

一、416.分割等和子集 1.题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 2.代码 3.思路 首先进行边界检查&#xff0c;若数组为空则直接返回 false。接着计算数组元素总和&#xff…

Lineageos 22.1(Android 15)实现负一屏

一、前言 方案是参考的这位大佬的&#xff0c;大家可以去付费订阅支持一波。我大概理一下Android15的修改。 大佬的方案代码 二、Android15适配调整 1.bp调整&#xff0c;加入aidl引入&#xff0c;这样make之后就可以索引代码了 filegroup {name: "launcher-src"…

5G NR PRACH 随机接入前导序列

目录 一、前言二、随机接入前导序列的产生三、 N c s N_{cs} Ncs​的规划3.1、 L R A L_{RA} LRA​839 N c s N_{cs} Ncs​规划3.2、 L R A L_{RA} LRA​139 N c s N_{cs} Ncs​规划3.3、 N c s N_{cs} Ncs​确定方法 四、根序列的规划4.1、根序列的选择与确定4.2、循环移位 …

【VUE】day07 路由

【VUE】day07 路由 1. 路由2. 前端路由的工作方式3. 实现简易的前端路由4. 安装和配置路由4.1 安装vue-router包4.2 创建路由模块4.3 导入并挂在路由模块 5. 在路由模块中声明路由的对应关系5.1 router-view 1. 路由 在 Vue.js 中&#xff0c;路由&#xff08;Routing&#xf…

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…

数学概念学习

# 欧式空间 ## 定义 日常生活观察到的几何空间&#xff1a;一维、平面和三维空间。 ## 点与向量 是欧式空间的基本元素。 ## 距离和内积 距离&#xff1a;通过欧几里得距离公式计算 内积&#xff08;点积&#xff09;&#xff1a; 通过两个向量的内积来测量他们的相似性&…

InnoDB 引擎核心知识点

InnoDB 引擎核心知识点 6.1 逻辑存储结构 表空间&#xff08;Tablespace&#xff09;&#xff1a;所有数据逻辑上存储在一个表空间中&#xff0c;物理上可能由多个文件组成。段&#xff08;Segment&#xff09;&#xff1a;分为数据段&#xff08;B树叶子节点&#xff09;、索引…

C++《红黑树》

在之前的篇章当中我们已经了解了基于二叉搜索树的AVL树&#xff0c;那么接下来在本篇当中将继续来学习另一种基于二叉搜索树的树状结构——红黑树&#xff0c;在此和之前学习AVL树类似还是通过先了解红黑树是什么以及红黑树的结构特点&#xff0c;接下来在试着实现红黑树的结构…

java实现coze平台鉴权+工作流调用(踩坑记录)

问题偏多建议大家看完文章后再开始实现 OAuth鉴权 https://www.coze.cn/open/docs/developer_guides/preparation https://www.coze.cn/open/docs/developer_guides/oauth_apps OAuth 授权码鉴权 https://www.coze.cn/open/docs/developer_guides/oauth_code 创建OAuth应…

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能优化算法 01.引言 当自然界的狂暴之力&#xff0c;化身数字世界的智慧引擎&…

面试题分享-多线程顺序打印奇偶数

目录 1.题目详情 2.解题思路 2.1.分析题目 2.2.解析思路 3.代码实现 4.运行结果 1.题目详情 昨天刷抖音&#xff0c;遇到一个面试题&#xff0c;描述如下&#xff1a; 请使用两个线程&#xff0c;分别顺序交替打印奇数和偶数&#xff0c;直到10为止。例如有两个线程&#…

QuecPython 网络协议之TCP/UDP协议最祥解析

概述 IP 地址与域名 IP 地址是网络中的主机地址&#xff0c;用于两台网络主机能够互相找到彼此&#xff0c;这也是网络通信能够成功进行的基础。IP 地址一般以点分十进制的字符串来表示&#xff0c;如192.168.1.1。 ​ 我们日常访问的网站&#xff0c;其所在的服务器主机都有…

React - LineChart组件编写(用于查看每日流水图表)

一、简单版本 LineChart.tsx // src/component/LineChart/LineChart.tsx import React, {useEffect,useRef,useImperativeHandle,forwardRef,useMemo,useCallback, } from react; import * as echarts from echarts/core; import type { ComposeOption } from echarts/core; …

医学图像分割数据集肺分割数据labelme格式6299张2类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图像分辨率&#xff1a;1024x1024 图片数量(jpg文件个数)&#xff1a;6299 标注数量(json文件个数)&#xff1a;6299 标注类别数&#xff1a;2 标注类别名称:["leftl…

帕金森病致生活艰难,如何缓解心理负担?

你是否留意到身边有人手部不由自主地颤抖&#xff0c;且肢体变得僵硬&#xff0c;行动也愈发迟缓&#xff1f;这很可能是帕金森病的症状。帕金森病是一种常见的神经系统退行性疾病&#xff0c;多发生于中老年人。​ 静止性震颤往往是帕金森病的首发症状&#xff0c;患者在安静状…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.1自注意力机制(Scaled Dot-Product Attention)的逐行代码实现

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.1 自注意力机制(Scaled Dot-Product Attention)的逐行代码实现1. 自注意力机制的核心原理与数学表达1.1 注意力计算的三元组:`Q, K, V`2. 逐行代码实现与解析2.1 输入嵌入与权重矩阵初始化2.2 完…

机械臂【逆运动学】

回顾正运动学fk&#xff1a; IK&#xff1a; 几何法 代数法 六轴 456轴交再同一点 有解析解 下列公式为正运动学部分结论 a和d是长度 &#xff0c;theta和alfa是角度 **疑问&#xff1a;alfa00&#xff1f; Z轴互相平行 ** 已知末端要在空间XYZ处如下 绿色项&#x…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录&#xff0c;点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏&#xff1a; IDEA 1. 问…

Ubuntu22.04美化MacOS主题

安装Tweaks 参考Ubuntu 22.04 桌面美化成Mac风格这篇更好点 sudo apt install gnome-tweaks gnome-shell-extensions -y安装macos主题 git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git # 进到文件目录 ./install.sh -t all -N glassy sudo ./tweaks.sh -g…

基于Python的机器学习入门指南

在当今数字化时代&#xff0c;机器学习&#xff08;Machine Learning&#xff09;已经成为科技领域中最热门的话题之一。它不仅改变了我们对数据的理解和处理方式&#xff0c;还在许多行业中得到了广泛应用&#xff0c;如金融、医疗、交通等。Python作为一门强大的编程语言&…