defer和async

1. defer

  立即下载,延迟执行。

  HTML5 规范要求脚本按照他们出现的顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本会优先于 DOMContentLoaded 事件触发前执行;

  在现实当中,延迟脚本并不一定会按照顺序执行,也不一定在 DOMCotentLoaded 事件出发前执行,一次最好只包含一个延迟脚本;

  使用范围:

    只适用于外部脚本文件;HTML5 已经规定,因此支持HTML5的实现会忽略给嵌入脚本设置的defer属性

  PS: 在XHTML文档中,要把defer属性设置为 defer=”defer”

2. async

  立即下载,异步执行,异步加载页面其他内容
  乱序执行,不能保证执行顺序,所以要确保脚本文件不相互依赖;建议异步脚本不要在加载期间修改 DOM

  异步脚本一定会在load事件之前执行,但可能会在 DOMContentLoaded 事件触发之前或者之后执行。

  使用范围:

    只适用于外部脚本文件;HTML5 已经规定,因此支持HTML5的实现会忽略给嵌入脚本设置的defer属性

  PS: 在XHTML文档中,要把defer属性设置为 defer=”defer”

dom文件加载的步骤为:
  • 1,解析HTML结构。
  • 2,DOM树构建完成。//DOMContentLoaded
  • 3,加载外部脚本和样式表文件。
  • 4,解析并执行脚本代码。
  • 5,加载图片等外部文件。
  • 6,页面加载完毕。//load

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!