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

相关推荐
www_stdio4 分钟前
CSS 自定义属性(CSS 变量):现代网页开发的利器
css
玉宇夕落6 分钟前
JavaScript 执行状态全景图:从调用栈到事件循环,深入理解异步机制
javascript
牧野星辰9 分钟前
eslint你不懂的都在这里,不信你进来看嘛~
前端·eslint
FogLetter9 分钟前
设计模式奇幻漂流:从单例孤岛到工厂流水线
前端·设计模式
ohyeah10 分钟前
深入理解 JavaScript 数组:从创建到遍历的完整指南
前端·javascript
逛逛GitHub11 分钟前
GitHub 开源 AI 好玩神器,自动记录你的一天。
前端·github
hollyhuang32 分钟前
正则校验:校验只能输入数字且首位不能是0
前端
一室易安34 分钟前
模仿elementUI 中Carousel 走马灯卡片模式 type=“card“ 的自定义轮播组件 图片之间有宽度
前端·javascript·elementui
前端世界35 分钟前
ASP.NET 实战:用 CSS 选择器打造一个可搜索、响应式的书籍管理系统
css·后端·asp.net
在下胡三汉38 分钟前
创建轻量级 3D 资产 - Three.js 中的 GLTF 案例
开发语言·javascript·3d