引入js的script标签如何做到异步加载

使用deferasync属性后,JavaScript加载和HTML解析之间的关系有所不同。了解这些差异可以帮助优化网页加载性能。

defer属性

行为:
  • 当使用defer属性时,浏览器会异步加载JavaScript文件,不会阻塞HTML的解析。
  • 所有带有defer属性的脚本会按它们在文档中的出现顺序执行。
  • 这些脚本会在HTML解析完成后执行,但在DOMContentLoaded事件触发之前。
优点:
  • 适用于需要确保脚本按顺序执行的情况。
  • 不会阻塞HTML解析,从而提升页面的加载性能和用户体验。
示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Defer Script Example</title><script src="script1.js" defer></script><script src="script2.js" defer></script>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>

async属性

行为:
  • 当使用async属性时,浏览器也会异步加载JavaScript文件,不会阻塞HTML的解析。
  • 一旦脚本文件下载完成,就会立即执行,这可能发生在HTML解析完成之前。
  • 脚本的执行顺序不一定按照它们在文档中的出现顺序。
优点:
  • 适用于不依赖于其他脚本和DOM结构的独立脚本。
  • 加快页面的初始加载速度,因为脚本可以在HTML解析过程中加载。
缺点:
  • 脚本的执行顺序无法保证,因此对于依赖顺序执行的脚本可能不适用。
示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Async Script Example</title><script src="script1.js" async></script><script src="script2.js" async></script>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>

总结

  • defer:脚本异步加载且按顺序执行,保证在HTML解析完成后执行,不会阻塞HTML解析。
  • async:脚本异步加载并尽快执行,可能在HTML解析完成前执行,不保证顺序,不会阻塞HTML解析。

选择使用defer还是async取决于脚本的用途和对执行顺序的要求。如果脚本需要与DOM交互并依赖于特定的加载顺序,defer是更好的选择。如果脚本独立且不依赖于其他脚本或DOM结构,async则可以提供更快的加载速度。

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

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

相关文章

Leetcode 3223. Minimum Length of String After Operations

Leetcode 3223. Minimum Length of String After Operations 1. 解题思路2. 代码实现 题目链接&#xff1a;3223. Minimum Length of String After Operations 1. 解题思路 这一题还是比较简单的&#xff0c;其实就是想明白对于任何一个字符&#xff0c;如果其个数在3个或以…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结&#xff1a; 初级&#xff1a;简单修改一下超参数&#xff0c;效果一般般但是够用&#xff0c;有时候甚至直接不够用 中级&#xff1a;optuna得出最好的超参数之后&#xff0c;再多一些epoch让train和testloss整体下降&#xff0c;然后结果就很不错。 高级&#xff1a;…

c++应用网络编程之五Windows常用的网络IO模型

一、Windows的网络编程 其实对开发者而言&#xff0c;只有Windows和其它平台。做为一种普遍流行的图形OS&#xff0c;其一定会与类Linux的编程有着明显的区别&#xff0c;这点当然也会体现在网络编程上。Windows有着自己一套相对独立的上层Socket编程模型或者说框架&#xff0…

Redis集群部署Windows版本

Redis集群 之前因为数据量的原因&#xff0c;并没有进行Redis集群的配置需要&#xff0c;现在由于数据量大&#xff0c;需要进行集群部署。 最初在windows系统部署&#xff0c;需要Redis的windows版本&#xff0c;但官方没有windows版本&#xff0c;所以需要去gitHub上找由民…

STM32 移植MQTT

在STM32上移植MQTT客户端库&#xff08;如Paho MQTT C库&#xff09;涉及几个关键步骤&#xff0c;包括库的选择、环境配置、代码集成和测试。下面是一个概括的指南&#xff0c;帮助你开始这个过程。 1. 选择MQTT库 对于STM32&#xff0c;你可以选择多个MQTT库&#xff0c;但…

【STM32】MPU内存保护单元

注&#xff1a;仅在F7和M7系列上使用介绍 功能&#xff1a; 设置不同存储区域的存储器访问权限&#xff08;管理员、用户&#xff09; 设置存储器&#xff08;内存和外设&#xff09;属性&#xff08;可缓冲、可缓存、可共享&#xff09; 优点&#xff1a;提高嵌入式系统的健壮…

Bash 学习摘录

文章目录 1、变量和参数的介绍&#xff08;1&#xff09;变量替换$(...) &#xff08;2&#xff09;特殊的变量类型export位置参数shift 2、引用&#xff08;1&#xff09;引用变量&#xff08;2&#xff09;转义 3、条件判断&#xff08;1&#xff09;条件测试结构&#xff08…

Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140604141 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

[C++进阶]模板进阶

此篇是学完stl后对于模板的补充 建议先看看这个[C初阶]模板初阶-CSDN博客 一、类模板 此处是对初阶讲过的 1. 类模板的定义格式 template<class T1, class T2, …, class Tn> class 类模板名 {}; 例如我们之前学习过的vector类&#xff1a; template<class T>…

C++中的多路转接技术之epoll

epoll 是干什么的&#xff1f;举个简单的例子 epoll的相关系统调用**epoll_create**和epoll_create1区别 epoll_ctl参数解释 **epoll_wait**参数说明返回值 epoll的使用 **epoll**工作原理epoll的优点(和 **select** 的缺点对应)epoll工作方式**水平触发**Level Triggered 工作…

Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

出海收款平台有哪些?全球首要15种收付平台收费比较

在跨境电商的浪潮中&#xff0c;收款问题一直是企业面临的最大挑战之一。随着全球化贸易的不断深入&#xff0c;越来越多的外国企业希望进入中国市场&#xff0c;但受限于法律法规和支付体系的不同&#xff0c;他们往往无法直接从中国用户手中收取款项。这时&#xff0c;第三方…

HashMap与ConcurrentHashMap

文章目录 HashMap1.1 HashMap 的数据结构&#xff1f;1.2 HashMap 的动态扩容1.3 Hash实现方法1.4 如何解决Hash冲突 ConcurrentHashMap HashMap 1.1 HashMap 的数据结构&#xff1f; 哈希表结构&#xff08;链表散列&#xff1a;数组链表&#xff09;实现&#xff0c;结合数…

详细分析Springboot自定义启动界面(附Demo)

目录 前言1. banner.text1.1 配置文件关闭1.2 启动类关闭1.3 命令行关闭 2. 自定义Banner类3. 自动配置类4. 总结 前言 实现自定义启动动画是一项有趣的任务&#xff0c;虽然Spring Boot本身不提供内置的动画功能&#xff0c;但可以通过一些技巧来实现 以下主要以Demo的形式展…

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…

pytest钩子hook使用2

pytest是一种用于编写单元测试的Python库。它允许程序员编写测试用例来验证代码的正确性&#xff0c;并提供了一系列的勾子&#xff08;hooks&#xff09;来在测试的不同阶段执行一些额外的操作。 使用pytest的勾子&#xff0c;可以在测试运行过程中插入自定义代码。下面是一些…

springSecurity学习之springSecurity注解使用

springSecurity注解使用 在使用springboot的时候&#xff0c;大家更习惯于使用注解来进行配置&#xff0c;那么springSecurity注解怎么使用呢 首先开启注解 EnableGlobalMethodSecurity(// Spring Security 开启注解securedEnabledtrue, // 开启Secured注解,会创建切点&…

MongoDB教程(十三):MongoDB覆盖索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言什么是覆盖…

数据结构(栈及其实现)

栈 概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。 进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出 LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

date hwclock

目录 1.查看操作系统时间和bios时间 2.将系统时间同步到硬件时钟 3.将硬件时间同步到系统时间 1.查看操作系统时间和bios时间 date && hwclock Wed Jun 26 23:05:19 CST 2024 Wed 26 Jun 2024 11:05:24 PM CST -0.380328 seconds 2.将系统时间同步到硬件时钟 #…