美文网首页饥人谷技术博客
async和defer的作用和区别

async和defer的作用和区别

作者: 曾祥辉 | 来源:发表于2017-05-20 09:02 被阅读0次

defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。
我们先来了解页面文档的渲染机制

  1. 浏览器通过HTTP协议请求服务器,获取HMTL文档并开始从上到下解析,构建DOM。
  2. 在构建DOM过程中,如果遇到外联的样式声明和脚本声明,则暂停文档解析,创建新的网络连接,并开始下载样式文件和脚本文件。
  3. 样式文件下载完成后,构建CSSDOM;脚本文件下载完成后,解释并执行,然后继续解析文档构建DOM 。
  4. 完成文档解析后,将DOM和CSSDOM进行关联和映射,最后将视图渲染到浏览器窗口。

在这个过程中,JS脚本文件的下载和执行是与文档解析同步进行的,如果JS出现堵塞,将会影响页面渲染,出现白屏、FOUC等现象,影响用户体验。因此我们需要使用defer和async来控制脚本异步加载。
defer和async的作用如下:

  • defer:用于开启新的线程下载脚本文件,并使脚本在文档解析完成后执行。
  • async:用于异步下载脚本文件,下载完毕立即解释执行代码。

下图可以更清楚地阐述defer和async的执行以及和DOMContentLoaded、load事件的关系:



绿色线是页面解析
蓝色线是JS下载
红色线是JS执行
我们可以明显看到defer和async的脚本下载都是异步进行的,而两者区别是defer要在页面解析完成后执行脚本,async是下载完脚本立刻执行脚本,同时async会影响脚本的解析。

下面是defer和async基本语法:

<script async src="script.js"></script>
<script defer src="script.js"></script>

关于defer我们需要注意下面几点:

  1. defer只适用于外联脚本,如果script标签没有指定src属性,只是内联脚本,不要使用defer;
  2. 如果有多个声明了defer的脚本,则会按顺序下载和执行 ;
  3. defer脚本会在DOMContentLoaded和load事件之前执行。

关于async,也需要注意以下几点:

  1. 只适用于外联脚本,这一点和defer一致;
  2. 如果有多个声明了async的脚本,其下载和执行也是异步的,不能确保彼此的先后顺序;
  3. async会在load事件之前执行,但并不能确保与DOMContentLoaded的执行先后顺序 。

相关文章

  • 进阶1

    async和defer的作用是什么?有什么区别 没有 defer 或 async,浏览器会立即加载并执行指定的脚...

  • async和defer的作用和区别

    defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。我们先...

  • async和defer的作用和区别

    作用 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标...

  • JS 语法 问题汇总

    1 . CSS和JS在网页中的放置顺序2 . 解释白屏和FOUC3 . async和defer的作用,区别4 . ...

  • async和defer的作用与区别

    没有defer或者async,浏览器会立刻加载并执行脚本,“立即”指的是在渲染该script标签之下的文档元素之前...

  • async 和 defer的作用与区别

    defer属性:延迟执行引入的 JavaScript,即这段 JavaScript 加载时, HTML 并未停止解...

  • 白屏和FOCUS

    新的思考. CSS和JS在网页中的放置顺序 白屏和FOUC async和defer的作用和区别 网页的渲染机制 C...

  • 关于无样式闪烁

    新的思考. CSS和JS在网页中的放置顺序 白屏和FOUC async和defer的作用和区别 网页的渲染机制 C...

  • async 和 defer 的作用是什么?有什么区别?

    接下来我们对比下 defer 和 async 属性的区别 没有 defer 或 async,浏览器会立即加载并执行...

  • defer和async区别

    主要记录下defer和async的区别:在没有defer或者async的情况下,会立即执行脚本,所以通常建议把sc...

网友评论

    本文标题:async和defer的作用和区别

    本文链接:https://www.haomeiwen.com/subject/zflyxxtx.html