如何保证script标签的加载顺序

本文探讨了HTML中script标签的加载和执行特性,包括async和defer属性的作用。async实现异步加载,不保证执行顺序;defer延迟加载,按脚本出现的顺序执行。了解这些可以帮助优化前端性能,避免因大文件阻塞页面渲染导致的假死情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

本章博文主要解决script标签的加载顺序问题。

问题现状

在写前端代码的时候,我们一般有两种方式去运行我们的脚本,第一种:直接在html中通过<script></script>去写,或者把脚本放到js中来引用。但是script标签的一些属性有哪些呢?我们来研究下.

属性名称解释
async对于普通脚本,如果存在 async 属性,那么普通脚本会被并行请求,并尽快解析和执行。简单的说,就是异步执行
crossorigin正常的 script 元素将最小的信息传递给 window.onerror,用于那些没有通过标准 CORS 检查的脚本。
defer这个布尔属性的设置是为了向浏览器表明,该脚本是要在文档被解析后,但在触发 DOMContentLoaded 事件之前执行的.包含 defer 属性的脚本会按照它们出现在文档中的顺序执行
fetchpriority提供一个指示,说明在获取外部脚本时要使用的相对优先级。允许的值:high/low/autointegrity/nomodule/nonce
src这个属性定义引用外部脚本的 URI,这可以用来代替直接在文档中嵌入脚本。
type (en-US)该属性表示所代表的脚本类型

结论

1 如果实在html内部写的script标签,是边加载边执行的,从上到下
2 如果是需要外部引入(一般来说也都是外部引入的),那么就需要下载完成并且解释执行完才会执行后面的Html和js,这就是常说的阻塞原理
3 如果外部引入的js体积过大,就会存在页面假死的情形,我们一般通过async和defer去解决
4 async属性就是异步加载
5 defer属性就是延迟加载,并严格按照标签引入顺序去执行
这里有两个概念在解释下,加载(下载)和执行(解释);一般外部的资源,是要通过网络下载的,体积越大,下载用的时间也就越多。如果我们1.js体积很大,下载耗时3秒;2.js体积很小,下载1ms,而我们2.js的方法会先执行,但是这个方法又依赖1.js里的方法,这时就会报错。所以我们要保证1.js先执行,这时就需要用defer属性保证执行顺序了。如果2.js不依赖1.js,而2.js的执行会阻塞页面的渲染,为了更好的体验,我们肯定希望它们是异步执行的,所以可以用async了。这里注意,用createelement创建的标签async默认true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值