一起了解script标签中的async和defer属性

一起了解script标签中的async和defer属性

前端当然要从 HTML 开始,我们来聊聊在 script 标签中加上 async/defer 时的功能及差异。

都明白的道理

我们都知道,浏览器解析 HTML 是一行一行按照顺序向后读取的,在传统的写法中,当浏览器读到 时,便会暂停解析 DOM,同时立即开始下载 中定义的资源,并在下载完成后立刻执行。由于这样的特性,可能会造成 DOM 树在还没有完全解析时就开始执行 JavaScript,需要操作 DOM 的程序可能因此无法正确执行,从而造成许多问题;或是由于 中的资源下载、执行时间过程,用户会卡在白画面,并会产生觉得网站太慢不好用之类的体验。

而解决方法也很简单,我们需要把 标签的位置都放到 的最后一行来避免 DOM 树解析不完全的问题,但是在复杂的网站中, HTML、JavaScript 的个头都很大,需要等到整个 DOM 树都载入完成才开始下载 内的资源,从网站读取完成到可操作,会产生明显的延迟感。

那这种问题该怎么解决呢?

从HTML4 开始, 多了 defer 属性,而 HTML5 则多了 async,两者都是用来帮助开发者控制 内资源的载入及执行顺序,以及避免 DOM 的解析被资源下载卡住的。

1.png

defer

defer 的意思是延迟(Deferred),在 HTML4.01 规范 中规定:

设置后,这个布尔属性会向用户代理提示该脚本将不会生成任何网页内容(例如,JavaScript中不会生成 “document.write”),因此,用户代理可以继续解析和渲染。

也就是说,在加上 defer 属性后,浏览器会继续解析、渲染画面,而不会因为需要载入 内的资源而卡住;实际执行时,会在 DOMContentLoaded 执行之前,由上到下的依照摆放顺序触发。

听起来很方便对吧?但要提醒各位,虽然 W3C 规范上说 defer 属性会是一个布尔值,但 IE9 以前的版本是自定义的,即使写成 仍然会有 defer 的效果,使用时要特别注意。

又是你这个老不死的 IE……

async

async 的意思是异步(Asynchronous),在 HTML5 规范 中规定:

…如果存在 async 属性,则脚本将会在可用时立即异步执行 …

标签中加上 async 属性后,与defer 的相同点是也会在后台执行下载,但不同的是当下载完成会马上暂停 DOM 解析(如果还没有解析完成的话),并开始执行 JavaScript。因为下载完成后会立即执行,加上 async 属性后,就无法保证执行顺序了。

这个属性在标准中,同时也支持通过 JavaScript 动态插入 的情况。例如:

const script = document.createElement('script')script.src = "/something/awesome.js"document.body.append(script)

动态创建的 ,默认就是异步载入;但可以通过设定属性将它关闭:

script.async = false

type=”module”

在主流的现代浏览器中, 的属性可以加上 type="module"。这时浏览器会认为这个文件是一个JavaScript 模块,其中的解析规则、执行环境会略有不同;这时 的默认行为会像是 defer 一样,在后台下载,并且等待 DOM 解析、渲染完成之后才会执行,所以 defer 属性无法在 type="module" 的情况下发生作用。但同样可以通过  async 属性使它在下载完成后即刻执行。

用法

现在你应该明白这两个属性的特点了,那么该怎样正确地使用呢?

defer 由于后台载入、不打断渲染及确保执行顺序的特点,基本上在没特殊需求的情况下,在 中设置一下就行了;当然 本身的摆放顺序还是要稍微留心一下。

async 比较特别,因为在下载后会立刻执行,且不保证执行顺序,一般常见的应用是设定在完全独立的小小模块中,例如背景Logo、页面广告等,在避免造成使用者体验变差的同时,尽量早的产生效果。

现在前端开发大都通过 Webpack 等打包工具来辅助处理,很少有自己设定这些属性的机会;开发者可以通过 script-ext-html-webpack-plugin 等插件的帮助,将切分好的 Chunk 设定个别需要的  属性。

总结

asyncdefer 专属的属性,对于网页中的其他资源,可以通过  的preloadprefetch 属性,来帮我们延迟加载 未来才需要用到的资源。

虽然 asyncdefer 这些属性的设置大都已经包含在现代框架的打包流程中了,但只有扎实的认识这些网页最基础的规范,才能明白自己写出来的代码最后会产生什么效果。

更多编程相关知识,请访问:编程视频课程!!

以上就是一起了解script标签中的async和defer属性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1548630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 20:04:47
下一篇 2025年12月21日 20:05:00

相关推荐

  • 怎么在html中实现图片超链接

    在html中实现图片超链接的方法:可以通过将图像元素嵌套在a元素中,使其成为一个链接,如【】。 目的: 对整个一幅图像文件设置超链接 思路: 可以通过将图像元素嵌套在a元素中使其变为一个链接。 立即学习“前端免费学习笔记(深入)”; (学习视频推荐:html视频教程) 语法: @@##@@ 举例: …

    2025年12月21日
    000
  • HTML hr是什么意思

    HTML hr是用于在页面中创建一条水平线的一种标签,在HTML中,标签没有结束标签,其使用语法如“这是段落这是段落”。 推荐:《HTML视频教程》 HTML 标签 定义和用法 标签在 HTML 页面中创建一条水平线。 立即学习“前端免费学习笔记(深入)”; 水平分隔线(horizontal rul…

    2025年12月21日
    000
  • html中行内元素与块级元素的区别是什么

    html中行内元素与块级元素的区别是:1、块级元素总是在新行开始,行内元素和其他元素在同一行;2、块级元素的高度、行高可控制,行内元素的高度、行高部分可改变;3、块级元素的宽度与内容无关,行内元素的宽度只与内容有关。 块级元素: (学习视频分享:html视频教程) 1、总是在新行上开始,占据一整行;…

    2025年12月21日
    000
  • 添加背景音乐的html标签是什么

    添加背景音乐的html标签是,bgsound是用以插入背景音乐,但只适用于IE,在netscape和firefox中并不适用,其参数设定很少,语法如“”。 推荐:《HTML视频教程》 添加背景音乐的html标签是。 bgsound 是用以插入背景音乐,但只适用于 IE,在netscape 和 fir…

    2025年12月21日
    000
  • html中的ul标签的作用是什么

    html中的ul标签的作用是:用于定义无序列表,如【】。ul标签支持class、dir、id、lang、style、title、xml等核心属性。 作用: 标签用于定义无序列表。 (学习视频分享:html视频教程) 将 标签与  标签一起使用,创建无序列表。 立即学习“前端免费学习笔记(深入)”; …

    2025年12月21日
    000
  • span是块元素吗?

    span不是块元素,而是内联元素(行内元素),可以对文档中的行内元素进行组合。span只是把内容定义成一个整体进行操作,不影响布局和显示,而且span没有什么实用特性,它的作用是围绕HTML代码中的其他元素,为其指定样式。 (推荐教程:html教程) span不是块元素,而是内联元素(行内元素),主…

    2025年12月21日
    000
  • 利用前端基础制作html开关图标

    我们先来看下效果图: (学习视频分享:html视频教程) html代码: 立即学习“前端免费学习笔记(深入)”; 开关图标 ON OFF css样式: body { text-align: center } .SwitchIcon { margin: 200px auto; } #toggle-bu…

    2025年12月21日
    000
  • www中的超文本文件是用什么语言编写的

    www中的超文本文件是用HTML语言(即超文本标记语言)编写的。WWW服务器中所存储的页面是一种结构化的文档,采用超文本标记语言(HTML)书写而成。 万维网(world wide web)上的一个超媒体文档称之为一个页面(外语:page)。作为一个组织或者个人在万维网上放置开始点的页面称为主页(外…

    2025年12月21日
    000
  • html中的特殊字符如何源码输出

    要实现Html中特殊字符不被转义(源码输出),有以下三种方法:方法一: (推荐教程:html教程) 将HTML代码嵌入到 举例: 立即学习“前端免费学习笔记(深入)”; body>哈哈哈dfdfd 以上就是html中的特殊字符如何源码输出的详细内容,更多请关注创想鸟其它相关文章!

    2025年12月21日
    000
  • 利用html实现一个三级菜单

    首先我们先来看一下效果图: (推荐教程:html教程) 完整代码: 立即学习“前端免费学习笔记(深入)”; 下拉菜单 /*重置浏览器默认样式*/ * { padding: 0; margin: 0; font-family: “Microsoft YaHei”; list-style: none; …

    2025年12月21日
    000
  • 在html页面中加入js可以用什么方法

    方法一:在head标签内引入JS文件 (推荐教程:html教程) 方法二:在body标签内写JS代码 //在这里面写你的js代码 </html 以上就是在html页面中加入js可以用什么方法的详细内容,更多请关注创想鸟其它相关文章!

    2025年12月21日
    000
  • 谈谈HTML标签元素中alt和title属性的区别

    本篇文章给大家介绍一下HTML标签元素中alt和title属性的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 概述 这道题大概还可以加个限定词,我们暂且把 标签排除在本次讨论之外。 元素的 alt 和 title 属性 有什么区别? (推荐教程:html教程) ALT 属性…

    2025年12月21日
    000
  • 分享三款美观的html按钮样式

    样式如下: (推荐教程:html视频教程) 按钮样式一: 立即学习“前端免费学习笔记(深入)”; #login_click{ margin-top:32px; height:40px;}#login_click a { text-decoration:none;background:#2f435e;…

    2025年12月21日 好文分享
    000
  • html怎么实现上角标效果

    先来看看效果: (推荐教程:html视频教程) 实现代码: 立即学习“前端免费学习笔记(深入)”; 制作角标的方法 .con{ height: 250px; width: 200px; margin: 0 auto; overflow: hidden; margin-top: 100px; posi…

    2025年12月21日
    000
  • 网页开发中实用的11个文本输入和6个按钮操作特效

    文本输入特效 1.power-mode-input PowerModeInput 可以让你的文本输入框更引人注目。 地址:https://github.com/lindelof/power-mode-input 2.TextInputEffects 简单的样式和效果,可增强文本输入交互。 地址:ht…

    2025年12月21日 好文分享
    000
  • 深入了解HTML中的编码规范

    本文档的目标是使HTML代码风格保持一致,容易被理解和被维护,如果自己没有这种习惯,请好好选择你的IDE,别再用“文本编辑器”。 1 代码风格 1.1 缩进与换行 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符。 示例: 立即学习“前端免费学习笔记(深入)”; …

    2025年12月21日
    000
  • html文档中怎么把图片作为背景?

    在html中,可以通过给body标签设置css background或background-image样式来把图片作为背景,语法格式“background/background-image:url(“图片路径”);”。 (推荐教程:html教程) html文档中可以使用css…

    2025年12月21日
    000
  • 利用html实现进度条效果的方法

    html代码: 视频学习推荐:html视频教程 css代码: .progress { height:10px; background:#ebebeb; border-left:1px solid transparent; border-right:1px solid transparent; bor…

    2025年12月21日
    000
  • html中的三种布局分别是什么

    流动布局(html网页默认的布局方式) (视频教程分享:html视频教程) 特点: 1、块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。 立即学习“前端免费学习笔记(深入)”; 2、内联元素都会在所处的包含元素内从左到右水平分布显示。(内联元素…

    2025年12月21日
    000
  • HTML 中 meta 大全

    Meta标签是HTML语言head区的一个辅助性标签,它位于HTML文档头部的head标记和title标记之间,它提供用户不可见的信息。Meta : 即 元数据(Metadata)是数据的数据信息。 元数据可以被使用浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 Web 服务调用。…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信