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

相关推荐
慕斯-ing1 小时前
Vue指令v-on
前端·vue.js·经验分享
树毅vs素忆2 小时前
chrome浏览器chromedriver下载
前端·chrome
三月七(爱看动漫的程序员)6 小时前
模型/O功能之提示词模板
java·前端·javascript·人工智能·语言模型·langchain·prompt
LCG元6 小时前
Vue.js组件开发-实现左侧浮动菜单跟随页面滚动
前端·javascript·vue.js
山海青风7 小时前
OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关
前端·人工智能·python·chatgpt·flask
关山月8 小时前
JS开发者应该了解的函数方法
前端
engchina8 小时前
深入理解 `box-sizing: border-box;`:CSS 布局的利器
前端·css·css3
cmdyu_9 小时前
前端架构师的职责之我见
前端
小郑T_T9 小时前
浏览器模块化难题
前端·javascript
浪遏10 小时前
大文件上传👈 | React + NestJs |分片、断点续传、秒传🚀 , 你是否知道 ???
前端·面试·nestjs