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 解析。

相关推荐
还好还好不是吗几秒前
老项目改造 vue-cli 2.6 升级 rsbuild 提升开发效率300% upupup!!!
前端·性能优化
sumAll3 分钟前
别再手动对齐矩形了!这个开源神器让 AI 帮你画架构图 (Next-AI-Draw-IO 体验)
前端·人工智能·next.js
OpenTiny社区5 分钟前
2025OpenTiny星光ShowTime!年度贡献者征集启动!
前端·vue.js·低代码
wangan09416 分钟前
不带圆圈的二叉树
java·前端·javascript
狗哥哥16 分钟前
从零到一:打造企业级 Vue 3 高性能表格组件的设计哲学与实践
前端·vue.js·架构
疯狂平头哥19 分钟前
微信小程序真机预览-数字不等宽如何解决
前端
Drift_Dream21 分钟前
前端趣味交互:如何精准判断鼠标从哪个方向进入元素?
前端
hqk23 分钟前
鸿蒙ArkUI:状态管理、应用结构、路由全解析
android·前端·harmonyos
米思特儿林33 分钟前
NuxtImage 配置上传目录配置
前端
JohnYan40 分钟前
Bun技术评估 - 22 Stream
javascript·后端·bun