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

相关推荐
2501_946233893 分钟前
Flutter与OpenHarmony Tab切换组件开发详解
android·javascript·flutter
3秒一个大4 分钟前
LangChain 中的 Output 解析器与 Zod:用法与意义
javascript·langchain
2501_946233895 分钟前
Flutter与OpenHarmony订单详情页面实现
android·javascript·flutter
2501_944446006 分钟前
Flutter&OpenHarmony日期时间选择器实现
前端·javascript·flutter
二狗哈7 分钟前
Cesium快速入门34:3dTile高级样式设置
前端·javascript·算法·3d·webgl·cesium·地图可视化
2501_944446007 分钟前
Flutter&OpenHarmony拖拽排序功能实现
android·javascript·flutter
JS_GGbond8 分钟前
前端实战:让表格Header优雅吸顶的魔法
前端
2501_944441758 分钟前
Flutter&OpenHarmony商城App下拉刷新组件开发
javascript·flutter·ajax
AlanHou8 分钟前
Three.js:Web 最重要的 3D 渲染引擎的技术综述
前端·webgl·three.js
JS_GGbond10 分钟前
前端必备技能:彻底搞懂JavaScript深浅拷贝,告别数据共享的坑!
前端