script 标签中 defer 和 async 属性的区别

script 标签中的 defer Vs. async

在 HTML 中,script 标签可以使用 deferasync 属性来控制外部 JavaScript 脚本加载和执行的方式deferasync 都可以提高页面的加载性能,主要区别整理如下。

区别点 defer async
加载顺序 按顺序加载 异步加载,不保证加载顺序
执行顺序 按文档中出现的顺序执行 加载完立即执行,不保证执行顺序
执行时机 HTML 文档完全解析后执行 , 但在 DOMContentLoaded 事件之前 可能在 HTML 文档解析完成之前执行
阻塞行为 不会阻塞 HTML 的解析 ,浏览器解析 HTML 文档,脚本在后台异步加载 不会阻塞 HTML 的解析 ,浏览器解析 HTML 文档,脚本在后台异步加载
适用场景 需要保证执行顺序 ,并在文档解析完成后再执行的脚本。如依赖于 DOM 的脚本。 不依赖其他脚本不依赖 DOM 的独立脚本。如分析工具或广告脚本。

注意:如果不使用 deferasync 属性,浏览器在遇到 <script> 标签时会阻塞 HTML 解析,直到脚本加载和执行完毕后才继续解析。使用 deferasync 后,脚本的记载是异步的,由网络进程 实现,不会阻塞HTML 解析;脚本的执行是同步的,会占用渲染进程,defer 脚本的执行不会阻塞解析,但 async 脚本可能会阻塞 HTML 解析。

相关推荐
Embrace9244 分钟前
钉钉工作台内嵌应用=》调用钉钉对话框
前端·javascript·钉钉
蜡台8 分钟前
Vue2 elementui2 中 el-switch 实现先判断改变状态
前端·vue.js·elementui·el-switch
whuhewei8 分钟前
CSS动画倍速播放
前端·css
周不凢11 分钟前
elementui 表格行选择:通过 toggleRowSelection 方法控制表格行的选中状态
前端·javascript·elementui
黄林晴12 分钟前
Swift 杀进 Android,Google 和 Apple 都要失眠了?
android·前端·swift
一晌小贪欢15 分钟前
Web 自动化指南:如何用 Python 和 Selenium 解放双手
开发语言·前端·图像处理·python·自动化·python办公
云浪16 分钟前
认识 Service Worker
前端·javascript
方也_arkling19 分钟前
【Vue-Day11】props的使用
前端·javascript·vue.js
心之语歌20 分钟前
前端刷新处理数据的几种方式
前端
FlyWIHTSKY22 分钟前
Vue3 插槽(Slot)使用
前端·javascript·vue.js