首页 > 其他分享 >请说说`<script>`、`<script async>`和`<script defer>`的区别

请说说`<script>`、`<script async>`和`<script defer>`的区别

时间:2025-01-13 09:25:21浏览次数:1  
标签:脚本 defer 解析 区别 HTML 执行 顺序

在前端开发中,<script> 标签用于嵌入或引用 JavaScript 代码。<script> 标签有几个属性可以影响脚本的加载和执行方式,其中 asyncdefer 是两个常用的属性。以下是它们之间的主要区别:

  1. 普通的 <script>:

    • 当浏览器遇到 <script> 标签时,它会立即下载并执行该脚本。
    • 在执行脚本期间,HTML 解析会被阻塞,直到脚本执行完毕。
    • 这可能导致页面渲染延迟,尤其是当脚本较大或网络较慢时。
  2. <script async>:

    • async 属性告诉浏览器异步下载脚本,即不阻塞 HTML 解析。
    • 一旦脚本下载完成,HTML 解析会暂停,脚本会立即执行,然后 HTML 解析会继续。
    • 这意味着脚本可能在文档的任何位置执行,不一定按照它们在 HTML 中出现的顺序。
    • async 脚本的执行顺序是不确定的,多个 async 脚本可能按照它们完成的顺序执行,而不是它们在页面中的顺序。
  3. <script defer>:

    • defer 属性也告诉浏览器异步下载脚本,即不阻塞 HTML 解析。
    • 但是,与 async 不同,defer 脚本会等到整个 HTML 文档解析完成后才执行。
    • defer 脚本按照它们在 HTML 中出现的顺序执行。
    • 这意味着如果你有多个 defer 脚本,它们会按照顺序一个接一个地执行,而不是并行执行。

总结

  • 普通的 <script> 会阻塞 HTML 解析直到脚本下载并执行完成。
  • <script async> 会异步下载脚本并在下载完成后立即执行,可能打断 HTML 解析,且执行顺序不确定。
  • <script defer> 会异步下载脚本但等到 HTML 解析完成后才执行,按照它们在 HTML 中的顺序执行。

标签:脚本,defer,解析,区别,HTML,执行,顺序
From: https://www.cnblogs.com/ai888/p/18667832

相关文章

  • 说说bind、call、apply的区别?并手写实现一个bind的方法
    bind、call、apply都是JavaScript中改变函数执行上下文的方法,他们的主要区别体现在调用函数时所传递的参数形式上。call:call方法接收一个参数列表,第一个参数将用作函数中的this对象,其余参数将直接作为函数调用时的参数。functiongreet(greeting,name){console.l......
  • 【芯片封测学习专栏 -- D2D 和 C2C 之间的区别】
    请阅读【嵌入式开发学习必备专栏Cache|MMU|AMBABUS|CoreSight|Trace32|CoreLink|ARMGCC|CSH】文章目录OverviewD2D(Die-to-Die)互联D2D定义D2D特点D2D使用场景C2C(Chip-to-Chip)互联C2C定义C2C特点C2C使用场景D2D和C2C的差异总结实际案例D2D......
  • C# 类型转换 as、is、括号强转之间的区别
    文章目录1、括号强制类型转换2、as运算符3、实例在C#中,as和强制类型转换(如:(T)Value)的主要区别在于它们处理类型转换不成功时的行为和应用场景1.括号强制类型转换使用语法:Typevariable=(Type)Expression;当你确定Expression运行时可以安全的转换为目标Type类型时,使用......
  • Python 2和Python 3之间有哪些主要区别?
    Python2和Python3是Python编程语言的两个主要版本,它们在语法、功能和性能上存在显著差异。这些差异不仅影响了代码的编写方式,还对程序的运行效率和可维护性产生了深远的影响。以下将详细阐述Python2与Python3之间的主要区别,并提供相应的示例代码。1.打印函数的变化在Pyt......
  • 圣杯布局和双飞翼布局的理解和区别,并用代码实现
    在前端开发中,link和@import都可以用来引入CSS样式,但它们之间有一些重要的区别。来源与本质:link:是HTML提供的方式,用于链接外部资源。不仅可以用于加载CSS,还可以用于加载其他类型的资源,如RSS等。@import:是CSS提供的方式,只能在CSS文件或<style>标签中使用,用于在一个CSS文件中导......
  • 页面导入样式时,使用link和@import有什么区别?
    在前端开发中,link和@import都可以用来引入CSS样式,但它们之间有一些重要的区别。来源与本质:link:是HTML提供的方式,用于链接外部资源。不仅可以用于加载CSS,还可以用于加载其他类型的资源,如RSS等。@import:是CSS提供的方式,只能在CSS文件或<style>标签中使用,用于在一个CSS文件中导......
  • golang中 &和*的区别
    golang中&和*的区别&用于获取地址*用于声明时,就是声明指针类型,用于解引用时,就是解引用指针。&是取地址操作符,用于获取变量的内存地址。例如:packagemainimport"fmt"funcmain(){varnumint=10//获取num的地址并赋值给pp:=&num......
  • golang 函数和方法的区别
    golang函数和方法的区别一句话总结就是,func直接函数名就是函数,否则就是方法.至于是谁的的方法,看函数前面有没有*号的指向.golang中函数第一等公民,所以以函数优先.demo\main.gopackagemainimport"fmt"//定义一个结构体typeStudentstruct{ namestring age......
  • 9.java中String,StringBuilder,StringBuffer 什么区别
    在Java中,String、StringBuilder和StringBuffer都是用来处理字符串的类,但它们之间有一些关键的区别,主要体现在可变性和线程安全性上。以下是它们的详细比较:1.String不可变性:String是不可变的类,也就是说,一旦创建了一个String对象,它的内容就不能再被修改。每......
  • 请说说鸿蒙和android有什么区别?
    鸿蒙与Android在前端开发方面的区别主要体现在以下几个方面:开发框架和语言:鸿蒙使用ArkTS语言,结合ArkUI声明式UI框架进行开发,提供了一套全新的组件和布局系统,更易于构建跨设备的应用。Android则主要使用Java或Kotlin语言,搭配AndroidSDK进行开发,UI布局使用XML,近年来也支持Jet......